2009-04-08 141 views
6
正確的路由

如果添加的資源映射到一個命名空間中的routes.rb用Rails 2.3,你怎麼做link_to(和form_for等)明白,它應該得到的命名空間的控制器,而不是一個在根名稱空間?的Rails:爲命名空間資源

例如...

有了這個routes.rb

map.namespace :admin do |admin| 
    admin.resources :opt_in_users 
end 

而這個視圖:

<%= link_to @anOptInUser %> 

link_to應該使用link_for_admin_opt_in_user,而是它嘗試使用link_for_opt_in_user,失敗。

回答

7

隨着命名空間資源和嵌套資源,你可以使用數組與符號:

link_to 'Click here', [:admin, @opt_in_user] 

form_for [:admin, @opt_in_user] do |form| .... 
+0

它仍然適用於Rails 3.1.3。 – olistik 2012-01-18 21:46:07

2

爲url_for軌道文檔表明你必須顯式調用:

如果你不是一個哈希值傳遞記錄 (如一個活動記錄或Active 資源)作爲選項參數, 你會觸發記錄的 的指定路由。查找將在 上發生該類的名稱。因此傳遞一個 工作室對象將嘗試使用workshop_path路由 。如果您有 嵌套路線,例如 admin_workshop_path,您必須明確地呼叫 (url_for不可能的 以便猜測該路線)。

(從http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#M001564

+0

是啊,這就是我最後做...感謝確認它是唯一辦法!(雖然我不同意這是不可能的* url_for猜測路由,如果只存在一個!) – nevyn 2009-04-13 14:31:35

0

Rails可以接受的對象的陣列隨後被映射到一個命名路線

例如<%= @的link_to comment.title,[@article,@comment]%>

你會得到一個鏈接到/articles/@article.to_param/comments/@article.to_param

這可以form_for使用等場所以及

0

使用:

link_to '...', admin_opt_in_user_path(@anOptInUser) 

對於集合:

admin_opt_in_users_path 

你也可以添加編輯和新的前綴。

當您使用form_for時,確保您在編輯操作時將新動作和admin_opt_in_user_path(@anOptInUser)傳遞給admin_opt_in_users_path。

相關問題