ruby-on-rails - 如何验证 Rails 中子模型中嵌套属性的父 ID 是否存在

标签 ruby-on-rails nested-attributes

这里有 2 个模型。 Order 采用 order_items 的嵌套属性。

class order
  has_many order_items
  accept_nested_attributes_for :order_items
end

class order_item
  belongs_to :order
  validates :order_id, :presence => true  #this line cause spec failure. 
end

如何验证 order_item 模型中是否存在 order_id?使用 nested_attributes,order_id 已在 order_item 中存在。但是,当单独保存 order_item 时(不与 order 一起保存),我们仍然需要验证 order_id

最佳答案

如果我做对了,您在保存与您的设置相关的记录时会遇到问题:

params = {number: 'order-123', order_items_attributes:{product_id:1, quantity: 2, price: 3}}
Order.create params # => this should not work

要修复它,您需要使用 inverse_of 选项明确告诉 Rails 关于关联:

class Order
  # without inverse_of option validation on OrderItem
  # is run before this association is created
  has_many :order_items, inverse_of: :order
  accepts_nested_attributes_for :order_items
end

在您的情况下不需要,但您也可以在 OrderItem 中添加 inverse_of:

class OrderItem
   belongs_to :order, inverse_of: :order_items
   # ... the rest
end

更多关于使用inverse_of选项与关联可以阅读here .

关于ruby-on-rails - 如何验证 Rails 中子模型中嵌套属性的父 ID 是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32809265/

相关文章:

ruby-on-rails - 如何让设计与 accepts_nested_attributes_for 一起工作?

ruby-on-rails - 无法批量分配 protected 属性以使用设计创建 has_many 嵌套模型

ruby-on-rails - Rails 4 Devise 嵌套表单无法批量分配 protected 属性

ruby-on-rails - 单表继承

ruby-on-rails - 生产中的 ActionCable 重复了 101 个响应

ruby-on-rails - rails 5.1 : "unknown firstpos: NilClass" - Issue reloading application

ruby-on-rails-3 - Rails中的label_tag和checkbox_tag问题

ruby-on-rails - 如何向所有属性为 true 的用户发送电子邮件 (Rails Mailer)

ruby-on-rails - CKEditor 和 iFrame/YouTube/其他嵌入插件显示奇怪的 HTML 代码

ruby-on-rails - 用于多态/单表继承关联的 Rails 嵌套属性形式