1

几乎我在 Rails 应用程序中的所有控制器操作,都有第一行

@result = super

所以,我决定在 before_filter 中有这个声明,但不知何故这不起作用。我要么什么都没有渲染,要么

Filter chain halted as :result rendered or redirected

所以基本上,我如何为控制器中的每个动作调用 super ?

干杯。

更新:

这个控制器存在于一个可安装的引擎中,它的职责是操纵默认 api 的结果并再次渲染。

这是基本结构

class Api::Custom::PlayersController < Api::V1::PlayersController
 before_filter :result
 def result
   @result = super
 end

 def func1
  @result.first
 end
 def func2
  ...

更新2:

我想,现在我知道确切的问题了。这是我的控制器的继承结构

-ApiBaseContoller
 -ApiPlayersController
  -Api::Custom::PlayersController 

即使我在最后一个控制器调用 before_filter 方法,它在祖父类“ApiBaseContoller”中触发它,并且在该控制器中,它不会知道 super 是什么。

我想知道 ApiPlayersController 和 Api::Custom::PlayersController 之间是否可以触发任何 before_filter 等效项。

-ApiBaseContoller
 -ApiPlayersController
   before_filter :do_something 
  -Api::Custom::PlayersController
4

1 回答 1

0

如果您的意图是捕获操作的输出并对其进行操作,那么您需要使用 a around_filter,而不是 a before_filter。我不确定这是否与 rails 的新(ish)流媒体功能配合得很好。

于 2013-05-24T13:00:35.520 回答