Rails:为什么调用`valid?`只验证一些相关记录而不是所有相关记录

时间:2016-12-15 06:26:40

标签: ruby-on-rails validation activerecord

我的模型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!时检查相关验证以及背后的原因时检查。

如果需要任何其他要求,请告诉我。

1 个答案:

答案 0 :(得分:2)

使用MasterDetailPage强制执行相关的模型验证

Text

如果尚未分配关联,则此验证不会失败。如果您想确保关联存在且保证有效,您还需要使用Toolbar

validates_associated