2011-05-22 96 views
3

我只是试图将它描述为高级别。我试图访问http://localhost:3000/loginRails 3 RoutingError:没有路由匹配{:controller =>“user_sessions”}

的错误是:

No route matches {:controller=>"user_sessions"} 

而且它的示数在这条线以下new.html.erb文件:

<%= form_for(@user_session) do |f| %> 

路线在routes.rb中是:

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

的user_sessions_controller.rb是:

class UserSessionsController < ApplicationController 
    def new 
    @user_session = UserSession.new 
    end 

    def create 
    @user_session = UserSession.new(params[:user_session]) 
    if @user_session.save 
     flash[:notice] = "Successfully logged in." 
     redirect_to root_path 
    else 
     render :action => 'new' 
    end 
    end 

    def destroy 
    @user_session = UserSession.find 
    @user_session.destroy 
    flash[:notice] = "Successfully logged out." 
    redirect_to root_path 
    end 
end 

和登录页面的实际观点如下(new.html.erb):

<h1>Login</h1> 

<%= form_for(@user_session) do |f| %> 
    <% if @user_session.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@user_session.errors.count, "error") %> prohibited this user from being saved:</h2> 

     <ul> 
     <% @user_session.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 
    <p> 
    <%= f.label :login %><br /> 
    <%= f.text_field :login %> 
    </p> 
    <p> 
    <%= f.label :password %><br /> 
    <%= f.password_field :password %> 
    </p> 
    <p><%= f.submit "Submit" %></p> 
<% end %> 

谢谢。

回答

2

单独使用form_for(@user_session)将尝试使用您在routes.rb中定义的资源构建路径。你目前没有(我假设,因为你没有提到它,请纠正,如果我错了)。

几个方法可以去..

添加资源,并限制那些你需要

resources :user_sessions, :only => [:create, :destroy] 

这些将使用默认路由namings,但你可以自定义的,最多,因为你需要。


匹配你需要的路线。

match 'login' => 'user_sessions#create', :as => :post_login, :via => :post 

查看

= form_for(@user_session), :url => post_login_path do |f| 
... 
相关问题