在 Rails 控制器操作上设置多个回调

Posted

技术标签:

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

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

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

def foo; end

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

【问题讨论】:

【参考方案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 ->.classProc's'.method(:length).classMethod 所以是的。除非我误解了这个问题。

以上是关于在 Rails 控制器操作上设置多个回调的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 控制器中将多个查询呈现为 json

在 Rails 控制器中,即使使用 json 响应也设置通知

阻止用户返回并查看以前提交的表单Rails

在不同的模型/控制器上使用 rails-jquery-autocomplete

Rails 3.2 - 为控制器操作禁用 CSRF 保护

在 Rails 中,如何处理多个选中的复选框,只在 , 或?