tim*_*one 4 ruby ruby-on-rails proc
我理解proc的概念,但有时我看到这样的代码(从rails指南中获取验证http://guides.rubyonrails.org/active_record_validations_callbacks.html#using-if-and-unless-with-a-proc):
class Order < ActiveRecord::Base
before_save :normalize_card_number,
:if => Proc.new { |order| order.paid_with_card? }
end
Run Code Online (Sandbox Code Playgroud)
看来这可以更简单地写成:
class Order < ActiveRecord::Base
before_save :normalize_card_number, :if => :paid_with_card?
end
Run Code Online (Sandbox Code Playgroud)
我在这里没有了解使用Proc的优势?
thx提前
在简单的情况下它们是等价的,但是procs允许更多的多功能性,而不需要仅仅为了验证而定义方法.
想象一下:
before_save :nuke, :if => Proc.new { |model| !model.nuked? && model.nukable? && model.region.nukable? }
Run Code Online (Sandbox Code Playgroud)
您始终可以在实例方法中编写该检查并使用符号引用它,但是对于特定逻辑仅在以下情况中的情况:if,将其保留在proc中是有效的.