在保存模型之前访问所有关联,包括嵌套属性
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?
。
我有一个 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?
。