2010-09-15 73 views
0

使用Rails 3,我在根名称空间的一些模型(例如产品),而是一个管理员::模块中的控制器(例如管理员:: 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控制器编辑产品是Admin :: ProductsController的,但两者之间的联系似乎缺少。我已经试过:

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

什么是构建这种系统的最Rails-y现代化的方式,我该如何解决这个问题?我觉得我一直在与框架战斗,所以如果有一个更好的方法来做到这一点,我愿意提出建议,但即使我试图通过将模型放在Admin ::中来解决问题,也只是开辟了新的问题...

回答

2

这应该做你想要什么:form_for [:admin, @product]

0

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