5

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

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| %>

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

4

2 回答 2

6

我想你想做的是

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

当@feed 是新记录时,form_for 将考虑将 account_feeds_path 与 POST 一起使用,而当 @feed 不是新记录时,将 account_feed_pa​​th(@feed) 与 PUT 一起使用。

于 2009-10-29T18:13:16.650 回答
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 路由......但是一个单一的“提要”资源。您不需要参考您的提要的 id - 但通常只需使用 @account.feed

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

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

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

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

<% end %>
于 2009-07-21T07:19:39.427 回答