我有一个包含许多操作的控制器(让我们说action1
,action2
,action3
和action4
)。我有一个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:
参数。
有没有办法有条件地将过滤器应用于某些操作?
答案 0 :(得分:0)
这是我提出的解决方法:
before_action :filter_thing,
except[:action3, :action4],
unless: -> { params[:action] == "action2" && should_not_filter? }
我仍然不完全满意,因为上述内容令人费解并难以阅读。