2013-06-26 188 views
0

我有一些路径在Rails 4(生锈的Rails用户)的麻烦。我有我的会话控制器以下路线:Rails 4路由 - 没有路由匹配

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

get "sessions/create" 
get "sessions/destroy" 

而且我有一个看起来像这样的形式:

= form_tag do 
    .form_container 
    .field 
     = label_tag :name, "Namn:" 
     = text_field_tag :name, params[:name] 
    .field 
     = label_tag :password, "Lösenord:" 
     = password_field_tag :password, params[:password] 
    .actions 
     = submit_tag 'Login', :class => "submit_button" 

我的会话#创建操作是这样的:

def create 
    user = User.find_by(name: params[:name]) 
    if user and user.authenticate(params[:password]) 
    session[:user_id] = user.id 
    redirect_to root_path 
    else 
    redirect_to login_url, alert: "Invalid user/password combination" 
    end 
end 

我得到以下错误:

No route matches [POST] "/login/create" 

我的路线在这种情况下应该如何看待?

回答

2

我一般都具有

resource :session 
post 'login' => 'sessions#create' 
get 'login' => 'sessions#new' 

创建

 session POST /session(.:format)        sessions#create 
new_session GET /session/new(.:format)       sessions#new 
edit_session GET /session/edit(.:format)      sessions#edit 
      GET /session(.:format)        sessions#show 
      PUT /session(.:format)        sessions#update 
      DELETE /session(.:format)        sessions#destroy 
     login POST /login(.:format)        sessions#create 
      GET /login(.:format)        sessions#new 

而在这之后仅仅用在需要的地方

= form_tag login_path 
    ... 

正确的网址应该做的伎俩

相关问题