path_prefix中的form_form和自定义参数

时间:2010-05-07 16:21:24

标签: ruby-on-rails parameters form-for

我有这条路线:

# 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。

1 个答案:

答案 0 :(得分:0)

看起来你想用命名空间做嵌套资源,也许你可以将你的路由重写为类似

map.namespace(:admin) do |admin|
  admin.resources :shops do |admin_shop|
     admin_shop.resources :item
  end
end

现在您应该可以使用[@shop, @item]来获取所需的路线。使用rake routes检查路线并查看它们是否符合您的喜好。