form_form и пользовательский параметр в path_prefix - PullRequest
2 голосов
/ 07 мая 2010

У меня есть этот маршрут:

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

И я хочу использовать магию form_for , чтобы повторно использовать одну и ту же форму в обоих: new и edit views:

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

Это работало и использовалось для создания URL создания для элемента или URL обновления для элемента в зависимости от состояния @ item объект.

Но это не работает в этом случае, потому что маршруты не существуют без параметра shop_id , и я не знаю, как сказать form_for что-то вроде этого :

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

Поскольку он пытается использовать @ item как параметр : shop_id .

или вот так

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

Поскольку он пытается построить этот URL:

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| %>

Но я просто хотел не делать этого, потому что у меня есть куча моделей, и это немного скучно :) 1052 *

Спасибо за любые предложения

е.

1 Ответ

0 голосов
/ 07 мая 2010

Похоже, что вы хотите делать вложенные ресурсы с пространством имен, может быть, вы можете переписать свои маршруты в что-то вроде

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

Теперь вы можете использовать [@shop, @item], чтобы получить нужный маршрут. Используйте rake routes, чтобы изучить маршруты и посмотреть, нравятся ли они вам.

...