Rails是否允许对validates_associated进行条件验证?我在Rails 4.2.0上看到以下内容。我试图做错吗?
型号:
class User < ActiveRecord::Base
has_many :books
validates_associated :books, if: :should_validate_book?
def should_validate_book?
return false
end
end
class Book < ActiveRecord::Base
belongs_to :user
validates_presence_of :title
end
Book的title属性的状态验证仍在运行(Rails控制台):
> u = User.create!
=> #<User id: 2, created_at: "2015-02-24 19:34:51", updated_at: "2015-02-24 19:34:51">
> u.books.build
=> #<Book id: nil, user_id: 3, title: nil, created_at: nil, updated_at: nil>
> u.valid?
=> false
> u.books.first.errors
=> #<ActiveModel::Errors:0x007fa256b210d8 @base=#<Book id: nil, user_id: 3, title: nil, created_at: nil, updated_at: nil>, @messages={:title=>["can't be blank"]}>
答案 0 :(得分:2)
事实证明,has_many
关系默认为validates_associated为ON。要有条件地进行修改,您需要在has_many声明中添加validate:false:
has_many :books, validate: false
答案 1 :(得分:0)
在Rails中,自远古以来validates_associated
只采用了a list个属性。除此之外,你有点混淆你的模型之间的行为,从你收集的标准到你粘贴的标准。更好的方法是调整Book
模型中的验证以考虑变化,让Book
自行决定是否应验证对象。