0

我是 Ruby on Rails 的超级新手。我正在尝试使用 Authlogic 制作身份验证系统(遵循本教程)。在我提交登录表单后,我得到的错误是:

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

这些是认为可能会导致该错误的代码。如果我应该添加更多代码以使其更清晰,请告诉我。

4

2 回答 2

1

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

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

注意new代替destroy

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

于 2012-02-21T19:35:00.963 回答
0

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

controller :user_sessions do

  get 'login' => :new
  post 'login' => :create
  delete 'logout' => :destroy
end
于 2012-02-22T03:50:45.850 回答