代码之家  ›  专栏  ›  技术社区  ›  Joe Holloway

Rails是否允许对validates_associated进行条件验证?

  •  4
  • Joe Holloway  · 技术社区  · 11 年前

    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"]}>
    
    2 回复  |  直到 11 年前
        1
  •  2
  •   Joe Holloway    11 年前

    事实证明,validates_associated在默认情况下为ON has_many 关系。要使其有条件,需要在has_many声明中添加validate:false:

      has_many :books, validate: false
    
        2
  •  0
  •   Eric    11 年前

    自古以来就在Rails中 validates_associated 只接受了 a list 属性。除此之外,根据我从你粘贴的标准中收集到的信息,你可能会混淆你的模型之间的行为。更好的方法是在 Book 模型以说明变化并出租 自行决定是否应验证对象。