2

我有这条路线:

# config/routes.rb
map.namespace :backshop, :path_prefix => '/:shop_id/admin' do |backshop|
  backshop.resources  :items
end

我想使用form_for魔术在两个视图上重用相同的表单:视图和编辑视图:

<% form_for [:backshop, @item] do |f| %>

这曾经有效,并用于根据@item对象的状态为项目构建创建 url更新项目的 url。

但这不适用于这种情况,因为没有shop_id参数的路线不存在,而且我不知道如何对form_for说这样的事情:

<% form_for [:backshop, @item], :shop_id => @shop do |f| %>

因为它尝试像:shop_id参数一样使用@item 。

或者像这样

<% form_for [:backshop, @shop, @item] do |f| %>

因为它试图构建这个 url:

backshop_shop_order_path

我知道我可以从部分中提取form_for声明,并根据newedit进行不同的调用:

<% form_for( @item, :url => backshop_items_path( @shop ) ) do |f| %>

<% form_for( @item, :url => backshop_item_path( @shop, @item ) ) do |f| %>

但我只是不想这样做,因为我有一堆模型而且有些无聊:)

感谢您的任何建议

F。

4

1 回答 1

0

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

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

现在你应该可以[@shop, @item]用来获取你想要的路线了。用于rake routes检查路线,看看它们是否符合您的喜好。

于 2010-05-07T19:27:44.157 回答