2009-07-21 209 views
3

我有一個單一的資源Rails的嵌套路線奇異資源

map.resource :account, :controller => "users" do |page| 
    page.resources :feeds 
end 

我試圖做一個表單添加飼料嵌套的路線。我開始與這個...

<% form_for @feed do |f| %> 
undefined method `feeds_path' for #<ActionView::Base:0x2123174> 

所以我嘗試

<% form_for [current_user,@feed] do |f| %> 
undefined method `user_feeds_path' for #<ActionView::Base:0x20b3e00> 

我想這是因爲從「用戶」到「賬號」重命名呢?所以我試了

<% form_for account_feeds_path(@feed) do |f| %> 
`@/account/feeds.%23%3Cfeed:0x22ea5c0%3E' is not allowed as an instance variable name 

不知道這個錯誤是什麼意思。所以我採取了這樣做的工作:

<% form_for @feed, :url=>{:action=>:create} do |f| %> 

這真的是最好的方法嗎?換句話說,在這種情況下是否沒有辦法使用命名路線?

+1

嘗試運行`rake routes`並查看顯示的提要。 – Scott 2009-07-21 06:55:30

回答

1

我想你在這裏對嵌套(+命名)路線和單一資源感到困惑。我猜你正在嘗試做的是有一個屬於用戶(帳戶)的單一feed資源,對吧?

如果是這樣,您現有的路線

map.resource :account, :controller => "users" do |page| 
    page.resources :feeds 
end 

也許應該

map.resources :accounts, :controller => "users" do |account| 
    account.resource :feed 
end 

注意accounts有多個資源,但飼料是奇異。這爲您的帳戶(即您的用戶)提供了通常的RESTful路由......但卻是一個單獨的「feed」資源。您不需要提及您的Feed的ID,但通常只需使用@ account.feed

使用rake routes即可顯示您創建的路線的完整列表。例如

account_feed_path(@account),例如會給你一個提要的顯示頁面。因此

的路徑,讓你使用的形式傭工像這樣的能力:我想你想要做的是

<% form_for [:account, @feed] do |f| %> 

那麼的form_for將目光使用與POST的account_feeds_path

<% form_for :feed, account_feed_path(@account) do |f| %> 

<% end %> 
+0

感謝您的回覆。其實我試圖做相反的事情。每個用戶都有一個帳戶,但可以有多個Feed。所以帳戶是單數,飼料複數(或不管它叫什麼)。你說得對,我的路線也被命名爲太。如果你有任何想法基於這個新的信息,我會很感激,謝謝! – 2009-07-21 17:42:37

5

當@feed不是新記錄時,@feed是帶有PUT的新記錄和account_feed_pa​​th(@feed)。