2010-09-21 148 views
10

我是Rails的新手,只是實現了一些基本的應用程序。剛開始我的第二個應用程序,並遇到了什麼是一個基本問題,但谷歌沒有讓我什麼。Ruby on rails「沒有路線匹配」

收到此錯誤:

No route matches {:controller=>"user", :action=>"admin_login"} 

這裏是我的routes.rb

Blah::Application.routes.draw do 
    resources :items, :cart, :user 
end 

這裏是我的applications.html.erb(的想法是,這是當然的頭,我試圖創建一個'login'的鏈接,現在只需要將'login'會話變量設置爲'1'

<!DOCTYPE html> 
<html> 
<head> 
    <title>Blah</title> 
    <%= stylesheet_link_tag :all %> 
    <%= javascript_include_tag :defaults %> 
    <%= csrf_meta_tag %> 
</head> 
<body> 

<div id="headerHolder"> 
    <div id="title">blah</div> 
    <div id="menu"> 
     <div class ="menuItem">blog</div> 
     <div class ="menuItem"> 
      <%= link_to "products", :controller => "items", 
            :action => "index" %> 
     </div> 
     <div class ="menuItem">contact</div>  
     <div class="menuItem"> 
      <%= link_to "cart", :controller => "cart", 
           :action => "index" %> 
     </div> 
     <div class="menuItem"> 
       <%= link_to_unless_current "admin", :controller => "user", 
                :action => "admin_login" %> 
     </div> 
    </div> 
</div> 

<div id="content"> 
    <%= yield %> 
</div> 

</body> 
</html> 

這是我user_controller.rb

class UserController < ApplicationController 

    def index 
    end 

    def admin_login 
    session[:login] = 1 
    session[:cart] = nil 
    flash[:notice] = "Admin user successfully logged in, cart reset." 
    redirect_to :controller => :items 
    end 

end 

我在我的routes.rb丟失了怎麼辦?否則......肯定這是愚蠢的。

回答

6

您需要admin_login方法添加到路線,如: -

map.connect '/user/admin_login', :controller => 'users', :action => 'admin_login' 
+0

所以自動「資源」路徑只處理「索引」和麪向公衆的方法可以通過HTML動詞訪問? – Chris 2010-09-21 04:54:54

+1

是的,腳手架生成的方法是通過資源添加的。 – Anubhaw 2010-09-21 05:10:57

19

對於滑軌> 3,你應該使用新的路由語法:

resources :items, :cart 

resource :user do 
    # Route GET /user/admin_login 
    get 'admin_login', :on => :collection 
end 

有關路由的詳細信息,請參閱Rails guides

2

找到「配置/ routes.rb中」文件,編輯,找到以下行:

# See how all your routes lay out with "rake routes" 

在這一行中添加以下行,如下所示:

map.connect '',:controller=>"index",:action=>"index" 
1

可以使用

match 'admin_login' => 'user#admin_login', :as =>'admin_login' 

此調用的默認方法是後u可以通過使用

來更改方法行爲
:via => [:post/:put/:get] 
0

有一個在Rails的一種新方法3.您可以使用以下方法:

get 'admin_login' => "user#admin_login"