在Rails模型验证中使用哪个更好:Proc或lambda?

dlu*_*biu 4 ruby validation lambda ruby-on-rails proc

我知道proc和lambda之间的区别。根据以下准则,在Rails模型验证中使用哪个更好:Proc或lambda?

程序:

  • 与块类似的行为。
  • 可以存储在变量中并在周围移动。
  • 参数数量没有问题。
  • return 从proc中退出将退出调用该方法的方法。

Lambda:

  • 与Proc相同,但更接近方法。
  • 严格考虑它获取和需要的参数。
  • return 从lambda中退出将退出lambda,并且调用该方法的方法将继续执行。

但是我还没有看到能使它有所作为的验证:

validates :name, present: true, if: -> { assotiation.present? }
validates :name, present: true, if: proc { |c| c.assotiation.present? }
Run Code Online (Sandbox Code Playgroud)

我检查了rubocop,但没有发现任何建议。您知道在ruby / rails样式指南,rubocop或其他工具中哪个更好?

Ale*_*kin 8

我能想到的唯一的区别是有可能使用早期的回报的?秒。也就是说,前者会很乐意验证,而后者会提出LocalJumpError

validates :name, present: true,
  if: -> { return false unless assotiation; assotiation.present? }
validates :name, present: true,
  if: proc { return false unless assotiation; assotiation.present? }
Run Code Online (Sandbox Code Playgroud)

另外,我使用以下经验法则:严格比完全开放更好。因此,除非绝对确定您需要一个proc?是到处都可以使用的更好的工具。