2012-02-21 2 views
0

Я супер новый для Ruby on Rails. Я пытаюсь создать систему аутентификации с использованием Authlogic (после этого tutorial). ошибка, я получаю право после отправки формы входа:ActionController :: RoutingError (нет совпадений маршрутов)/user_sessions/......)

No route matches "/user_sessions/%23%3CUserSession:0x103486aa8%3E" 

Удивительно URL страницы сразу после отправки формы, который также воспитывает ошибку:

http://localhost:3000/user_sessions/%23%3CUserSession:0x103486aa8%3E 

I не знаю, что я сделал не так, и где эта странная вещь из кода UserSession исходит от !!!

Это как моя форма Войти выглядит следующим образом:

<% form_for @user_session do |f| %> 
    <%= f.error_messages %> 
    <p> 
    <%= f.label :username %><br /> 
    <%= f.text_field :username%> 
    </p> 
    <p> 
    <%= f.label :password %><br /> 
    <%= f.password_field :password %> 
    </p> 
    <p><%= f.submit "Submit" %></p> 
<% end %> 

Вот мой UserSession класс:

class UserSession < Authlogic::Session::Base 
    def to_key 
    new_record? ? nil : [ self.send(self.class.primary_key) ] 
    end 
end 

и создать действие моего UserSessionController:

def create 
    @user_session = UserSession.new(params[:user_session]) 
    if @user_session.save 
     flash[:notice] = "Login successful!" 
     redirect_back_or_default root_path 
    else 
     render :action => :new 
    end 
    end 

"redirect_ba ck_or_default метод»в ApplicationController:

def redirect_back_or_default(default) 
    redirect_to(session[:return_to] || default) 
    session[:return_to] = nil 
end 

И, наконец, все, что связано с user_sessions в routes.rb:

resources :user_sessions 

match 'login' => "user_sessions#destroy", :as => :login 
match 'logout' => "user_sessions#destroy", :as => :logout 

Эти коды, которые я мысль могла быть вовлечены в получении, что ошибка. Если я должен добавить еще какой-нибудь код, чтобы сделать его более понятным, пожалуйста, дайте мне знать.

+0

Покажите нам свой пользовательский класс. Там что-то не так, и он не вызывает to_param на нем должным образом. – DGM

+0

Я добавил класс UserSession к сообщению. – soroush

+0

Хорошо, почему вы установили to_key? Что вы пытаетесь достичь? ах, учебник ... он устарел, вам не нужна эта функция ... – DGM

ответ

1

Хорошо, во-первых, у вас плохой маршрут:

match '/login', :to => 'user_sessions#new', :as => 'login' 

Примечание new вместо destroy

кроме того, to_key не требуется в более поздних версиях - я использую рельсы 3 и дон Это можно сделать в моей модели UserSession.

+0

Спасибо. Ты прав. нет необходимости в функции to_key. Но мне также пришлось обновить свой Gemfile и изменить «gem» authlogic »на« gem »authlogic»,: git => 'git: //github.com/odorcicd/authlogic.git',: branch => 'rails3 '", а затем" bundle install ".Мои маршруты были на самом деле хороши в моем исходном коде, это была только опечатка только в сообщении. Спасибо чувак. – soroush

+0

huh. Мне даже не нужно указывать git repo в моем gemfile ... – DGM

0

Определенно необходимо изменить маршрут, чтобы не совпадать с логином для уничтожения. Вот настройки маршрута, которые у меня есть ... (из примера «Agile Web Development with Rails»).

controller :user_sessions do 

    get 'login' => :new 
    post 'login' => :create 
    delete 'logout' => :destroy 
end