除非存在属性,否则传递已定义的方法?

时间:2011-12-16 05:54:01

标签: ruby-on-rails ruby ruby-on-rails-3 gmaps4rails

让新手无法解决这个问题。我有没有地址的商店(只有一个website),所以当播种实际上并不创建它们时只有{{1}的种子(Google-Maps-for-Rails) }。

Store.rb

address

我仍然想在这里使用所有内容但是传递此块的正确方法是什么?

谢谢。

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。您可以通过将方法传递到ifunless作为验证选项来绕过验证。在上面的代码中,您将它作为选项传递给在线验证器而不是验证本身。将除非移出散列并将其传递给方法的名称或Proc - 实际上返回true或false的任何内容。这是一个例子:

validates :address, 
          :presence => { :message => "You must enter an address, website, or both." },
          :unless => Proc.new { |store| store.address.nil? && store.website.present? }

除非商店既没有地址又有网站,否则每次都会运行验证。如果您需要更复杂的逻辑,我建议将其从Proc移到方法中。