在保存模型之前访问所有关联,包括嵌套属性

Access all associations, including nested attributes, before save model

我有一个 Order、一个 Item 和一个 Product 模型。

class Order < ApplicationRecord
  has_many :items, dependent: :destroy, inverse_of: :order
end

class Item < ApplicationRecord
  belongs_to :order
  belongs_to :product
end

class Product < ApplicationRecord
  has_many :items
end

我需要在 before_save 回调中计算每个 Item 有多少个框(item.units/item.product.units_per_box),但我无法访问嵌套属性,只能访问持久化项.

我在 Order 模型中有这个:

before_save :calculate_boxes, on: [:create, :update]

def calculate_boxes
  self.boxes = 0
  self.items.each do |item|
    self.boxes += item.units / item.product.units_per_box
  end
end

但是,正如我所说,它只是计算持久化项。

不知道这是否重要,但我正在使用@nathanvda 的 Cocoon gem 来管理 create/edit 表单上的嵌套属性。

尝试使用 self.items.collect。那应该有效。另外我建议你在循环中使用 unless item.marked_for_destruction?