ActionController :: RoutingError (Нет подходящих маршрутов "/ user_sessions / ......) - PullRequest
0 голосов
/ 21 февраля 2012

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

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

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

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

Понятия не имею, что я сделал неправильно и откуда взялся этот странный код 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

и действие create моего 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_back_or_default" в ApplicationController :

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

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

resources :user_sessions

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

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

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

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

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

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

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

0 голосов
/ 22 февраля 2012

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

controller :user_sessions do

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