我是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 认为可能涉及获取该错误的代码。如果我应该添加更多代码以使其更清晰,请告诉我。
答案 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