繁体   English   中英

Rails:为什么调用“ valid”仅验证某些关联记录而不是所有关联记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM