如何在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中提取逻辑,以便可以从两个控制器轻松调用它。

+0

好吧,把代码放到一个普通的类中是个好主意。我试着把它放在'ProductsHelper'中,我可以通过首先包含'ProductsHelper'来从我的'ProductsController'成功地调用它。但是,我发现无法将其包含在ActiveAdmin中。他们的DSL似乎不支持'include'。 –