Доступ ко всем ассоциациям, включая вложенные атрибуты, перед сохранением модели - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть модели 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

Мне нужно вычислить, сколько ящиков у каждого Item (item.units/item.product.units_per_box) вbefore_save обратный вызов, но я не могу получить доступ к вложенным атрибутам, только к постоянным элементам.

У меня есть это в 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

Но как яПри этом он просто вычисляет сохраняемые элементы.

Не знаю, имеет ли это значение, но я использую Cocoon gem @ nathanvda для управления вложенными атрибутами в форме создания / редактирования.

1 Ответ

0 голосов
/ 25 сентября 2018

Попробуйте использовать self.items.collect.Это должно работать.Также я бы предложил вам использовать unless item.marked_for_destruction? внутри цикла.

...