2009-07-21 165 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)。