如何使用rails before_action仅对某些操作有条件?

时间:2018-03-21 18:44:30

标签: ruby-on-rails before-filter

我有一个包含许多操作的控制器(让我们说action1action2action3action4)。我有一个before_action过滤器我想在某些操作中排除,接近:

before_action :filter_thing, except: [:action3, :action4]

但是,我希望有条件地调用过滤器action2

我尝试将其分成两个before_action,但第二个似乎覆盖了第一个;在以下代码filter_thing中没有调用action1

before_action :filter_thing, except: [:action3, :action4]
before_action :filter_thing, only: [:action2], unless: :should_not_filter?

我想也许我可以使用条件skip_before_action

skip_before_action :filter_thing, only: :action2, if: :should_not_filter?

但它似乎忽略了if:参数。

有没有办法有条件地将过滤器应用于某些操作?

1 个答案:

答案 0 :(得分:0)

这是我提出的解决方法:

before_action :filter_thing,
              except[:action3, :action4],
              unless: -> { params[:action] == "action2" && should_not_filter? }

我仍然不完全满意,因为上述内容令人费解并难以阅读。