ruby-on-rails 如何在某些操作中使用rails before_action条件?

bvhaajcl  于 2023-10-21  发布在  Ruby
关注(0)|答案(2)|浏览(119)

我有一个控制器,它有很多操作(比如action1action2action3action4)。我有一个before_action过滤器,我想排除一些行动,接近:

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

但是,我希望对action2有条件地调用过滤器。
我试着简单地把它分成两个before_action,但第二个似乎覆盖了第一个;在下面的代码中,没有为action1调用filter_thing

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:参数。
有没有一种方法可以有条件地将过滤器应用于某些操作?

chhkpiq4

chhkpiq41#

这是我想出的解决办法:

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

我仍然不完全满意,因为上面的内容令人费解,坚韧阅读。

oxcyiej7

oxcyiej72#

派对迟到了,但你可以试试这个。没有测试BTW:

before_action :filter_thing, except: %i[action3 action4], unless: :filter_not

private

def filter_not
  action_name && should_not_filter?
end

动作名
来自API指南:
返回此控制器正在处理的操作的名称。

相关问题