在过滤器异常之前将常量传递给 rails

Pass constant to rails before filter exceptions

我有几个之前的过滤器类似于: before_filter :setup_plan, except: :some_action, :another_action, :yet_another_action

但我有 3 或 4 个例外情况,许多前置过滤器。起初我打算更改所有 before_filter 方法中的逻辑,但我发现自己重复了很多代码。在一个更完美的世界中,我会有一个单独的控制器用于我想要添加的动作,但我必须在同一个控制器中添加动作,并围绕已经存在的结构进行工作。

我想做的是用我想在之前的过滤器中跳过的方法创建一个常量或变量,例如

ACTIONS_TO_SKIP = [:some_action, :another_action, :yet_another_action]

然后简单地使用before_filter :setup_plan, except: ACTIONS_TO_SKIP

执行此操作时出现未初始化常量错误。我尝试将其移至助手中的方法,但也出现了未定义的方法错误。 我知道我错过了一些东西,但无法弄清楚。真的没有办法传递 returns 我想在之前的过滤器中跳过的方法数组的方法或常量吗?只是想让我的控制器更简洁、更简洁。

您可以尝试这样的操作:

before_filter :my_before_filter, if: :action_to_skip?

def action_to_skip?
  %w[some_action another_action yet_another_action].member?(action_name)
end

您需要在调用 skip 之前声明常量。该文件是自上而下解释的。

class FoosController
  ACTIONS_TO_SKIP = [:yes, :this, :and, :something, :more]

  before_filter :setup_plan, except: ACTIONS_TO_SKIP
end

请注意,在最近的 Rails 版本中,现在称为 before_actionRails 4: before_filter vs. before_action (也许你想升级...)