我有这条路线:
# config/routes.rb
map.namespace :backshop, :path_prefix => '/:shop_id/admin' do |backshop|
backshop.resources :items
end
我想使用 form_for 魔术在两者上重复使用相同的表单: new 和 edit 视图:
<% form_for [:backshop, @item] do |f| %>
这曾经有用,用于根据 @item <的状态构建项目的创建网址或更新项目的网址 / strong>对象。
但这不适用于这种情况,因为如果没有 shop_id 参数,路线不存在,而且我不知道如何对 form_for 说些什么像这样:
<% form_for [:backshop, @item], :shop_id => @shop do |f| %>
因为它尝试像:shop_id 参数一样使用 @item 。
或者像这样
<% form_for [:backshop, @shop, @item] do |f| %>
因为它试图建立这个网址:
backshop_shop_order_path
我知道我可以从部分中提取 form_for 声明,并根据新或编辑执行不同的调用:
<% form_for( @item, :url => backshop_items_path( @shop ) ) do |f| %>
和
<% form_for( @item, :url => backshop_item_path( @shop, @item ) ) do |f| %>
但我只是想不要这样做因为我有一堆模特而且有点无聊:)
感谢您的任何建议
F。
答案 0 :(得分:0)
看起来你想用命名空间做嵌套资源,也许你可以将你的路由重写为类似
map.namespace(:admin) do |admin|
admin.resources :shops do |admin_shop|
admin_shop.resources :item
end
end
现在您应该可以使用[@shop, @item]
来获取所需的路线。使用rake routes
检查路线并查看它们是否符合您的喜好。