Согласование Admin :: контроллеров с :: моделями - PullRequest
0 голосов
/ 16 сентября 2010

Используя Rails 3, у меня есть несколько моделей (например, Product) в корневом пространстве имен, но контроллеры (например, Admin :: ProductsController) в модуле Admin ::.К сожалению, это, кажется, вызывает проблемы с основными функциями, такими как form_for (@product), производящий

undefined method `products_path' for #<#<Class:0x103dc4110>:0x103dc1618>

Это, вероятно, потому что записи rout.rb

namespace :admin do
    resources :products
end

производят

admin_products GET    /admin/products(.:format)   {:action=>"index", :controller=>"admin/products"}

с префиксом "admin_", но form_for (@product), похоже, этого не понимает.

Я хотел бы просто объявить Rails, что контроллером для редактирования Products является Admin:: ProductsController, но эта связь между ними отсутствует.Я пробовал:

  • Настройка параметров в декларации rout.rb (но, будучи полным Rails n00b, вполне возможно, что я упустил правильный способ сделать это)
  • Поискдля некоторой формы объявления в классе модели изменить способ form_for выводит помощника _path
  • Перемещение моделей в пространство имен Admin;однако, это не только концептуально нежелательно, поскольку объекты модели используются где-либо за пределами Admin :: и не имеют какой-либо конкретной семантической привязки к администрированию (только редактирование и т. д. в контроллере), но это также вызывает проблемы с тестированием иприборы, в частности, которые я не смог решить.

Какой самый современный Rails-y способ структурировать такую ​​систему и как я могу решить эту проблему?Я чувствую, что боролся с фреймворком, поэтому, если есть общий лучший способ сделать это, я открыт для предложений, но даже моя попытка полностью обойти проблему, поместив модели в Admin :: просто открыла новые проблемы...

Ответы [ 2 ]

2 голосов
/ 16 сентября 2010

Это должно делать то, что вы хотите: form_for [:admin, @product]

0 голосов
/ 16 сентября 2010

Попробуйте form_for @product, :url => admin_product_path(@product)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...