我正在研究一个模型,该模型在创建对象时需要设置两个关联,在一种情况下除外。
基本上,它需要像这样工作。
class Example < ActiveRecord::Base
has_one :foo
has_one :bar
validates_presence_of :foo
validates_presence_of :bar, :unless => :foo == Foo.find_by_name('ThisFooDoesntLikeBars')
end
我不确定如何构建:除非条件在这里,因为它需要检查:foo是否是特定对象。
你怎么做这样的事情?
答案 0 :(得分:14)
:unless
接受Proc
validates_presence_of :bar, :unless => Proc.new { |ex| ex.foo == Foo.find_by_name('ThisFooDoesntLikeBars') }
:除非 - 指定要调用的方法,proc或字符串以确定是否不应进行验证(例如:unless =&gt;:skip_validation,或:unless =&gt; Proc.new {| user | user.signup_step&lt ; = 2})。方法,proc或string应该返回或计算为true或false值。
http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html
答案 1 :(得分:3)
以下内容如何:
class Example < ActiveRecord::Base
has_one :foo
has_one :bar
validates_presence_of :foo
validates_presence_of :bar, :unless => Proc.new { |example| example.foo == Foo.find_by_name('ThisFooDoesntLikeBars') }
end