我发现在我看到的所有示例(包括rails文档)中:验证方法的if选项使用Proc.new而不是lambda,例如
class Foo < ActiveRecord::Base
validates_presence_of :name, :if => Proc.new{|f| .... } # why not lambda here?
end
这有什么理由吗? 据我所知,lambda
两者似乎都是理想的行为:如果上面提到的选项,我有什么遗漏吗?
答案 0 :(得分:36)
两者似乎都是理想的行为:如果上面提到的选项,我有什么遗漏吗?
我在猜测:
允许Procs更为可取,因为他们不关心参数的数量。所以我可以轻松地写下面的任何一个:
validates_presence_of :name, :if => Proc.new{|f| f.display_name.blank? } # I care about 'f' here as I need it to check something.
......和:
validates_presence_of :secret_sauce, :if => Proc.new{ MyApp::REQUIRE_SECRET_SAUCE } # I don't care about any arguments being passed in.
这似乎是一件小事,但我想这会增加灵活性。