gpt4 book ai didi

ruby-on-rails - 如何在 Ruby on Rails 中复制记录及其相关记录?

转载 作者:数据小太阳 更新时间:2023-10-29 08:00:28 26 4
gpt4 key购买 nike

在我的 Rails 应用程序中,我有 invoices 及其关联的 items

在我的 InvoicesController 中,我添加了这个方法:

def duplicate
invoice = Invoice.find(params[:id])
@invoice = invoice.dup
invoice.items.each do |item|
@invoice.items << item
end
render :new
end

def create
@invoice = current_user.invoices.build(params[:invoice])
if @invoice.save
flash[:success] = "Invoice created."
redirect_to edit_invoice_path(@invoice)
else
render :new
end
end

单击链接会使用正确的 invoiceitems 数据实例化一个表单。

但是,在尝试创建 记录时出现错误:

Couldn't find Item with ID=4 for Invoice with ID=

谁能告诉我我在这里遗漏了什么,或者是否有更聪明的方法来复制包括其关联记录的记录?

感谢您的帮助。

最佳答案

这是复制主要对象及其下方的每个项目的方法。不会保存新对象,也不会保存项目(目前)。

  def duplicate
dup.tap do |new_invoice|
items.each do |item|
new_invoice.items.push item.dup
end
end
end

还有一个快速测试来证明:

require 'test_helper'

class InvoiceTest < ActiveSupport::TestCase

def original_invoice
Invoice.create(number: 5).tap do |invoice|
invoice.items.create(name: "a", price: "5")
invoice.items.create(name: "b", price: "50")
end
end
test "duplication" do
new_invoice = original_invoice.duplicate
new_invoice.save
assert_equal 2, new_invoice.items.count
end
end

关于ruby-on-rails - 如何在 Ruby on Rails 中复制记录及其相关记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17012360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com