【问题标题】:Reconciling Admin:: controllers with :: models协调 Admin:: 控制器与 :: 模型
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      试试form_for @product, :url =&gt; admin_product_path(@product)

      【讨论】:

        猜你喜欢
        • 2016-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-09
        • 2013-11-29
        • 1970-01-01
        • 1970-01-01
        • 2010-10-04
        相关资源
        最近更新 更多