Это кажется довольно тривиальной проблемой, но я не могу ее решить. У меня есть две таблицы invoices
и invoice_items
. В модели счета:
accepts_nested_attributes_for :invoice_items, allow_destroy: true, reject_if: :all_blank
Теперь в методе, основанном на некоторых условиях, я хочу динамически добавлять больше элементов счета. В обратном вызове before_save я делаю что-то вроде этого:
def process_amounts
if condition_holds
self.invoice_items_attributes << {key_1: value_1, key_2: value_2} # Pseudo code.
end
end
Но этот фрагмент кода вызывает ошибки. Похоже, только сеттер доступен для nested_attributes.
NoMethodError Исключение: неопределенный метод `invoice_items_attributes 'для # Invoice: 0x007fd4de84a7a0
Я также попробовал другой подход, который привел к другому поведение:
def process_amounts
if condition_holds
self.invoice_items_attributes = invoice_items.map(&:attributes) + [{key_1: value_1, key_2: value_2}] # Pseudo code.
end
end
Приведенный выше фрагмент кода приводит к 3 элементам! Он не переназначает invoice_items_attributes.
Так как решить эту проблему?