ActionController :: RoutingError(没有路由匹配“/ user_sessions / ......)

时间:2012-02-21 18:42:16

标签: ruby-on-rails ruby authlogic usersession

我是Ruby on Rails的新手。我正在尝试使用Authlogic创建一个身份验证系统(遵循此tutorial)。我提交登录表单后,我收到的错误是正确的:

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

令人惊讶的是,提交表单后页面的URL也会出现错误:

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

以及 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
ApplicationController 中的

“redirect_back_or_default”方法:

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

最后一切与 routes.rb 中的user_sessions相关:

resources :user_sessions

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

这些 I 认为可能涉及获取该错误的代码。如果我应该添加更多代码以使其更清晰,请告诉我。

2 个答案:

答案 0 :(得分:1)

好的,首先,你的路线不好:

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

请注意new而不是destroy

另外,在以后的版本中不需要to_key - 我使用的是rails 3,并且在我的UserSession模型中没有它。

答案 1 :(得分:0)

绝对需要将您的路线更改为不匹配登录以销毁。 这是我的路由设置...(来自“使用Rails的Agile Web开发”示例)。

controller :user_sessions do

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