如何在 Rails 中复制除一个属性之外的记录?

Tin*_*n81 4 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

在我的 Rails 应用程序中,我有一个方法可以复制invoice包含其items.

class Invoice < ActiveRecord::Base

  def duplicate
    dup.tap do |new_invoice|
      new_invoice.date = Date.today
      new_invoice.number = nil              <<<--------------
      items.each do |item|
        new_invoice.items.push item.dup
      end
    end
  end

end 
Run Code Online (Sandbox Code Playgroud)

现在我想要的是根本不复制该属性,因此可以在我的操作中生成一个新属性(为了简洁起见,我没有在此处显示)。numbernumbernew

现在,我将其设置为nil不是我想要的。

有任何想法吗 ?

Hen*_*k N 6

也许是这样的:

def duplicate
  new_invoice = Invoice.new(attributes.except("id", "number"))
  items.each do |item|
    new_invoice.items.push item.dup
  end
  new_invoice
end
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要绕过受保护的属性等,则可以循环遍历属性。但是self.attributes使用Hash#except可能就是您想要的。