Rails嵌套路由的奇异​​资源

我在单一资源上有一个嵌套路由

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

我正在尝试制作一个表单来添加Feed。 我从这开始……

  undefined method `feeds_path' for # 

所以我试试

  undefined method `user_feeds_path' for # 

我想这是因为将它从“用户”重命名为“帐户”? 所以我试过了

  `@/account/feeds.%23%3Cfeed:0x22ea5c0%3E' is not allowed as an instance variable name 

不确定那个错误意味着什么。 所以我已经使用了这样做:

 {:action=>:create} do |f| %> 

这真的是最好的方式吗? 换句话说,在这种情况下是否无法使用命名路由?

我想你想做的是

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

当@feed是新记录时,form_for将使用带有POST的account_feeds_path,当@feed不是新记录时,将使用PUT使用account_feed_pa​​th(@feed)。

我认为你在这里对嵌套(+命名)路由和奇异资源感到困惑。 我猜你正在尝试做的是拥有一个属于用户(帐户)的单一feed资源,对吧?

如果是这样,您现有的路线

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

也许应该是

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

请注意, accounts是多个资源,但Feed是单数。 这为您的帐户(即您的用户)提供了通常的RESTful路线……但却是一个单一的“Feed”资源。 您无需参考Feed的ID – 但通常只需使用@ account.feed即可

使用rake routes向您显示此创建的路由的完整列表。

例如, account_feed_path(@account)将为您提供Feed的“显示”页面。

因此,路径使您能够使用表单助手,如下所示:

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