如何在ActiveAdmin中调用正常的控制器方法?
问题描述:
我使用ActiveAdmin作为Products
模型。如何在ActiveAdmin中调用正常的控制器方法?
在我的ProductsController
中,我在update
方法中做了一些特殊的魔术,我想在从ActiveAdmin更新产品时也会发生这种情况。为了干,我想从ActiveAdmin中调用ProductsController.update
方法。我试过了:
controller do
def update
ProductsController.update
end
end
但是我得到一个NoMethodError in Admin::PoisController#update
。显然ActiveAdmin的命名空间仍然适用。我该如何引用该命名空间之外的控制器?
答
你绝对还在命名空间。称它为::ProductsController
以获得全球一个。但你还没有完成。
Rails中的控制器操作不是类方法,而是实例方法。你必须实例化控制器来调用一个动作。你可以试试,但我认为它不会奏效。
我会从原始的ProductsController
中提取逻辑,以便可以从两个控制器轻松调用它。
好吧,把代码放到一个普通的类中是个好主意。我试着把它放在'ProductsHelper'中,我可以通过首先包含'ProductsHelper'来从我的'ProductsController'成功地调用它。但是,我发现无法将其包含在ActiveAdmin中。他们的DSL似乎不支持'include'。 –