首页 > 解决方案 > Rails - 动态添加更多嵌套属性

问题描述

这似乎是一个非常微不足道的问题,但我无法解决这个问题。我有两张桌子invoicesinvoice_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

但是这段代码会引发错误。似乎只有 setter 可用于nested_attributes。

NoMethodError 异常:# Invoice:0x007fd4de84a7a0 的未定义方法“invoice_items_attributes”

我还尝试了另一种导致奇怪行为的方法:

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。

那么如何解决这个问题呢?

标签: ruby-on-rails

解决方案


尝试这个

 if condition_holds
    self.invoice_items << InvoiceItem.new(key_1: value_1, key_2: value_2)
 end

我假设 InvoiceItem 是 invoice_items 的型号名称。


推荐阅读