【问题标题】:Set multiple call backs on rails controller action在 Rails 控制器操作上设置多个回调
【发布时间】:2022-01-19 20:40:12
【问题描述】:

我在一个方法上有两个回调,这是我的代码:

before_action :set_foo, only: :foo 
before_action -> {set_bar @bar }, only: :foo 

def foo; end

无论如何我可以缩短它以便我只需要调用一次 before_action 吗?

【问题讨论】:

    标签: ruby-on-rails ruby callback tdd dry


    【解决方案1】:

    您可以将多个“名称”传递给before_action:

    before_action :set_foo, -> { set_bar @bar }, only: foo
    

    before_action(在这种情况下为only: :foo)的选项适用于所有“名称”。文档明确说明了“名称”可以是什么,但是,就像 Rails 中的其他回调一样,它们可以是任何“可调用”的东西:方法名称、procs、lambdas、...

    【讨论】:

    • 我希望文档更清晰一点,因为它们显示了before_action(names,block) 的签名,但实际签名是before_action(*names,&blk),这使得它接受多个名称和一个可选块更加明显。即使“名称”意味着多个,我也会根据记录的签名假设这将是 before_action [:set_foo,-> { set_bar @bar }] 并且我不知道如何传递选项,因为看起来第二个参数是 a) 强制性的; b) 位置。不过这个答案是绝对正确的
    • @engineersmnky 您可以在“我希望文件更清晰一点”之后加上句号(甚至是感叹号)。很多 Rails 都在摆弄东西,看看什么是有效的,并阅读源代码来填补缺失的部分。 OTOH,我还没有提交任何拉取请求来充实文档,所以......
    • 在一个稍微不相关的注释中,方法/函数是另一个 Ruby 类的实例吗?
    • @CJG ->{}.class 说Proc 和's'.method(:length).class 说Method 所以是的。除非我误解了这个问题。
    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    相关资源
    最近更新 更多