Rails:验证foo的存在,除非bar =='baz'

And*_*rew 8 validation activerecord ruby-on-rails ruby-on-rails-3

我正在研究一个模型,该模型在创建对象时需要设置两个关联,在一种情况下除外.

基本上,它需要像这样工作.

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
Run Code Online (Sandbox Code Playgroud)

我不确定如何构建:除非条件在这里,因为它需要检查:foo是否是特定对象.

你怎么做这样的事情?

Dog*_*ert 15

:unless 接受Proc

  validates_presence_of :bar, :unless => Proc.new { |ex| ex.foo == Foo.find_by_name('ThisFooDoesntLikeBars') }
Run Code Online (Sandbox Code Playgroud)

:unless - 指定要调用的方法,proc或字符串,以确定是否不应进行验证(例如:unless =>:skip_validation,或:unless => Proc.new {| user | user.signup_step <= 2}).方法,proc或string应返回或计算为true或false值.

http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html

  • 我想我应该先做先到先得.感谢您及时回复. (3认同)