2011-11-21 18 views
0

我正在學習Ruby on Rails,我對link_to函數有個愚蠢的問題。如何鏈接到不同的控制器在rails?

我建立了一個名爲「home」的控制器,我創建了「index」作爲一個動作。

我設置了設計。然而,當我瀏覽到像sign_insign_up等一些鏈接我得到這個錯誤:

Routing Error 
No route matches {:controller=>"devise/home"} 

我已經將範圍縮小到:

<%= link_to "Home", { :controller => "home", :action => "index" }, :class => "navlink" %> 

這適用於我的行動爲家,但不是爲了我的設計行動。

我在這裏錯過了什麼?

回答

3

Devise爲您創建一組輔助函數,用於生成正確的路徑。從命令行運行rake routes以查看它們。您將得到類似於以下內容的輸出(假定您的Devise模型名爲User)。

   new_user_session GET /users/sign_in(.:format)      {:controller=>"devise/sessions", :action=>"new"} 
        user_session POST /users/sign_in(.:format)      {:controller=>"devise/sessions", :action=>"create"} 
      destroy_user_session GET /users/sign_out(.:format)      {:controller=>"devise/sessions", :action=>"destroy"} 
       user_password POST /users/password(.:format)      {:controller=>"devise/passwords", :action=>"create"} 
      new_user_password GET /users/password/new(.:format)     {:controller=>"devise/passwords", :action=>"new"} 
      edit_user_password GET /users/password/edit(.:format)    {:controller=>"devise/passwords", :action=>"edit"} 
       user_password PUT /users/password(.:format)      {:controller=>"devise/passwords", :action=>"update"} 
      user_registration POST /users(.:format)        {:controller=>"devise/registrations", :action=>"create"} 
     new_user_registration GET /users/sign_up(.:format)      {:controller=>"devise/registrations", :action=>"new"} 
     edit_user_registration GET /users/edit(.:format)       {:controller=>"devise/registrations", :action=>"edit"} 
      user_registration PUT /users(.:format)        {:controller=>"devise/registrations", :action=>"update"} 
      user_registration DELETE /users(.:format)        {:controller=>"devise/registrations", :action=>"destroy"} 

追加_path每一行的第一部分給你,你需要調用輔助函數的名稱。

例如,下面會給你一個鏈接到登錄頁面:

<%= link_to "Login", new_user_session_path %> 

請記住,如果該請求是DELETE而非GET(如退出鏈接),你需要指定這是對link_to的呼叫的一部分。

<%= link_to "Logout", destroy_user_session_path, :method => :delete %> 
+0

謝謝,看起來像我需要在我的模板,以改變我的呼籲:<%=的link_to 「家」,home_index_path,:類=> 「navlink」 %> – bigdaveyl

+0

嗯,實際上'index'行動通常不在輔助函數名稱中包含單詞'index'(與訪問網站時不必鍵入'index.html'的方式一樣)。所以它可能只是'home_path'。找出最好的方法就是運行'rake routes'! – Russell

相關問題