Ruby on Rails 5.2 - ArgumentError: Passing string to be evaluated in :if and :unless conditional options is not supported

Ruby on Rails 5.2 - ArgumentError: Passing string to be evaluated in :if and :unless conditional options is not supported

我将 rails 应用程序上的旧版 ruby 更新为 Rails 5.2.4,但收到以下错误:

ArgumentError:不支持传递要在 :if 和 :unless 条件选项中求值的字符串。相反,为实例方法或 lambda、proc 或块传递符号。

users.rb 模型的错误出现在包含以下内容的行上:

if: 'self.subscription.blank?'

是否可以将此行替换为:

if: lambda {puts 'self.subscription.blank?'}

我进行了更改,它似乎运行良好,我是 rails 新手,请就这种情况下的最佳做法向我提出建议。我使用了 lambda 但我不确定我的代码是否正确或者它是否是最佳解决方案。

非常感谢。

if: lambda {puts 'self.subscription.blank?'}

这里的条件永远不会 运行 因为 puts returns nil 并且 nil 是假的。

你真正想要的是:

if: lambda { subscription.blank? }
# or the more common short-hand
if: ->{ subscription.blank? }