使用:: models协调Admin :: controllers

时间:2010-09-15 20:58:10

标签: namespaces ruby-on-rails-3

使用Rails 3,我在根命名空间中有一些模型(例如Product),但在Admin :: module中有控制器(例如Admin :: ProductsController)。不幸的是,这似乎导致了基本功能的问题,例如form_for(@product)产生

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

这可能是因为routes.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,但两者之间的链接似乎缺失了。我试过了:

  • 调整routes.rb声明中的参数(但是总Rails为n00b,完全有可能我错过了正确的方法)
  • 在模型类中寻找某种形式的声明来改变form_for推导_path帮助器的方式
  • 将模型移动到Admin命名空间;然而,这不仅在概念上是不合需要的,因为模型对象在Admin ::之外的其他地方使用,并且与管理没有任何特定的语义联系(只是控制器中的编辑等),但它也导致测试和特别是我无法解决的装置。

构建此类系统的Rails-y,现代化方法是什么,我该如何解决这个问题呢?我觉得我一直在与框架作斗争,所以如果总体上有更好的方法可以做到这一点我愿意接受建议,但即使我试图通过将模型放在Admin ::中来解决问题只是开辟了新的问题...

2 个答案:

答案 0 :(得分:2)

这应该做你想做的事:form_for [:admin, @product]

答案 1 :(得分:0)

尝试form_for @product, :url => admin_product_path(@product)