Bri*_*ong 5 routes ruby-on-rails
我在单一资源上有一个嵌套路由
map.resource :account, :controller => "users" do |page|
page.resources :feeds
end
Run Code Online (Sandbox Code Playgroud)
我正在尝试制作一个表单来添加Feed.我从这开始......
<% form_for @feed do |f| %>
undefined method `feeds_path' for #<ActionView::Base:0x2123174>
Run Code Online (Sandbox Code Playgroud)
所以我试试
<% form_for [current_user,@feed] do |f| %>
undefined method `user_feeds_path' for #<ActionView::Base:0x20b3e00>
Run Code Online (Sandbox Code Playgroud)
我想这是因为将它从"用户"重命名为"帐户"?所以我试过了
<% form_for account_feeds_path(@feed) do |f| %>
`@/account/feeds.%23%3Cfeed:0x22ea5c0%3E' is not allowed as an instance variable name
Run Code Online (Sandbox Code Playgroud)
不确定该错误意味着什么.所以我已经使用了这样做:
<% form_for @feed, :url=>{:action=>:create} do |f| %>
Run Code Online (Sandbox Code Playgroud)
这真的是最好的方式吗?换句话说,在这种情况下是否无法使用命名路由?
我想你想做的是
<% form_for [:account, @feed] do |f| %>
Run Code Online (Sandbox Code Playgroud)
当@feed是新记录时,form_for将使用带有POST的account_feeds_path,当@feed不是新记录时,将使用PUT将account_feed_path(@feed)用于.
小智 1
我认为您在这里对嵌套(+命名)路由和单一资源感到困惑。我猜您想要做的是拥有feed属于用户(帐户)的单一资源,对吧?
如果是这样,您现有的路线
map.resource :account, :controller => "users" do |page|
page.resources :feeds
end
Run Code Online (Sandbox Code Playgroud)
也许应该是
map.resources :accounts, :controller => "users" do |account|
account.resource :feed
end
Run Code Online (Sandbox Code Playgroud)
请注意,accounts资源是复数,但提要是单数。这为您的帐户(即您的用户)提供了通常的 RESTful 路由……但是一个单一的“提要”资源。您不需要引用 Feed 的 ID - 但通常只需从 @account.feed 进行操作
用于rake routes向您显示创建的路由的完整列表。
account_feed_path(@account),例如将为您提供提要的显示页面。
因此,这些路径使您能够使用表单助手,如下所示:
<% form_for :feed, account_feed_path(@account) do |f| %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4263 次 |
| 最近记录: |