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 に答える