You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 7.1(Ruby3.2.2):为特定Action设置inline代码before_action的正确语法

Rails 7.1 + Ruby 3.2.2 中为特定Action配置inline代码的before_action正确语法

在Rails里,要给指定Action绑定带inline代码的before_action过滤器,正确的写法有两种常用形式:

写法1:使用do...end代码块

这种方式可读性最高,适合多行代码场景:

before_action only: :destroy do
  authorize!(with: AllowAllPolicy)
end

如果要指定多个Action,将only的值改为数组即可:

before_action only: [:destroy, :update] do
  authorize!(with: AllowAllPolicy)
end

写法2:使用lambda简写(单行inline形式)

适合单行代码的场景,用->定义lambda作为参数,再跟上选项:

before_action -> { authorize!(with: AllowAllPolicy) }, only: :destroy

多Action同样用数组:

before_action -> { authorize!(with: AllowAllPolicy) }, only: [:destroy, :update]

你之前写法的问题

你尝试的那些写法错误在于参数传递顺序或语法格式不符合Rails的方法规则:

  • 直接把authorize!调用放在哈希里,Rails会将其识别为选项的键值对,而非要执行的代码
  • 把选项写在代码块内部,不符合before_action的参数结构要求
  • 括号包裹的参数格式错误,没有正确区分代码块和选项哈希

内容的提问来源于stack exchange,提问作者Sig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 15:00:55