如何将新模型对象基于旧模型对象,但允许自定义某些字段

时间:2012-01-18 23:29:55

标签: ruby-on-rails

我想添加基于当前现有项目的新项目的功能。新项目应包含所有旧项目的任务,但应重置某些字段。

我添加的模型类方法(def self.copy(item))在某种工作之下,但它只是设置为完全克隆项目;我想要它克隆一些字段,让用户输入其余的数据。

例如,当我复制一个项目时,它的编号也会被复制,但我宁愿让用户输入一个唯一的编号 - 我该怎么做?

理想情况下,我想将复制功能集成到项目控制器上的新操作中,这样每次用户创建新项目时,他们都有机会将其基于数据库中当前的另一项目。 。这有意义吗?

class Task < ActiveRecord::Base
  belongs_to :department
  belongs_to :item
  belongs_to :customer
end

class Item < ActiveRecord::Base
has_many :tasks

  def self.copy(item)
    newitem = item.clone
    newitem.tasks << item.tasks.map(&:clone)
    return newitem
  end
end

1 个答案:

答案 0 :(得分:4)

除了复制字段'item_number'之外,这将创建一个新项目。

def self.copy(old_item)    
  Item.new(old_item.attributes.merge({:item_number => nil}))
end