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
相关产品推荐
相关产品推荐

