ruby-on-rails - Rails - 动态添加更多嵌套属性
问题描述
这似乎是一个非常微不足道的问题,但我无法解决这个问题。我有两张桌子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
但是这段代码会引发错误。似乎只有 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。
那么如何解决这个问题呢?
解决方案
尝试这个
if condition_holds
self.invoice_items << InvoiceItem.new(key_1: value_1, key_2: value_2)
end
我假设 InvoiceItem 是 invoice_items 的型号名称。
推荐阅读
- c - 在第一个 fread 值上从 C 错误中的 .bin 文件中读取内容
- javascript - 控制台记录来自 API 打印未定义的响应
- f# - 当异步块内存在运行时错误时,F# 不会退出
- python - 为什么 tornado 不提供 decode_signed_value 函数?
- iis - 仅当主网站上存在文件夹时,反向代理的 IIS UrlRewrite 才有效
- python - python检查dict是否有任何嵌套项
- mysql - 比较同一列MYSQL中的日期
- python - python start_new_thread 正在打印无
- c++ - 让 ImGui 与 Vulkan 一起工作时遇到问题
- javascript - 将本地 glTF 文件加载到 Javascript 内存中