在Ruby on Rails中复制父记录和关联子记录的最佳方法?

Tin*_*n81 1 ruby ruby-on-rails ruby-on-rails-3

可能重复:
ActiveRecord:如何克隆嵌套关联?

我有一张桌子,invoices反过来可以有很多items.

现在,在我的invoices索引视图中,我想在每个invoice说明重复发票的旁边放置一个链接.

如果没有子记录,这将非常简单:

<%= link_to "Duplicate", new_invoice_path(invoice.attributes) %>
Run Code Online (Sandbox Code Playgroud)

但如果发票也items应该重复,怎么办呢?

作为一个Rails新手,我无法理解这一点.所有这些都可以通过new我的控制器内的动作来处理吗?

def new
  @invoice = current_user.invoices.build(:project_id => params[:project_id])
  @title = "New invoice"
end
Run Code Online (Sandbox Code Playgroud)

或者我是否需要copy在我的控制器中创建另一个名为的函数?

什么是最佳做法?

感谢您的任何意见......

Aar*_*ley 6

逻辑应该放在模型中

invoice.rb:

def deep_dup
  new_invoice = Invoice.create(self.dup.attributes)
  items.each do |item|
    new_invoice.items.create(item.dup.attributes)
  end
  return new_invoice
end
Run Code Online (Sandbox Code Playgroud)

然后在控制器中,执行一个名为的操作duplicate:

def duplicate
  new_invoice = @invoice.deep_dup
  redirect to new_invoice
end
Run Code Online (Sandbox Code Playgroud)