【发布时间】:2011-04-12 21:54:16
【问题描述】:
使用 Rails 3,我在根命名空间中有一些模型(例如 Product),但在 Admin:: 模块中有控制器(例如 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 方式是什么,我该如何解决这个问题?我觉得我一直在与框架作斗争,所以如果有一个整体更好的方法来做到这一点,我愿意接受建议,但即使我试图通过将模型放入 Admin:: 来完全解决这个问题:只是打开了新问题…
【问题讨论】:
标签: namespaces ruby-on-rails-3