[英]Rails query all records whose all associated record has nil or some specific value in some specific fields
[英]Rails: why is calling `valid?` only validate some of associated record not all associated records
我有一个模型Order
,就像
# app/models/order.rb
class Order< ApplicationRecord
has_one :detail
has_one :extra
..
end
我有两个orders
order1 = Order.first
order1.detail #<OrderDetail:0x00 name: "abc", remark: 'test1'>
order1.extra #<OrderExtra:0x00 email: nil, recipent: nil>
order2 = Order.second
order1.detail #<OrderDetail:0x00 name: "abc", remark: 'test1'>
order1.extra #<OrderExtra:0x00 email: nil, recipent: "xyz">
我何时调用order1.valid?
或order1.save!
它不会检查OrderExtra
验证并返回true。 但是当我调用order2.valid?
或order2.save!
它检查OrderExtra
验证。
order1.save! # true
order2.save! # ActiveRecord Invalid OrderExtra
我想知道Rails如何在调用save!
时检查是否要检查关联的验证save!
以及其背后的原因。
如果需要任何其他要求,请告诉我。
使用validates_associated
来执行关联的模型验证
class Book < ActiveRecord::Base
has_many :pages
belongs_to :library
validates_associated :pages, :library
end
如果尚未分配关联,则此验证不会失败。 如果要确保关联既存在又保证有效,则还需要使用validates_presence_of
。
class Library < ActiveRecord::Base
has_many :books
validates_presence_of :name
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.