如何复制属于同一模型的一组“任务”

时间:2012-01-13 06:33:31

标签: ruby-on-rails ruby templates copy project

我在使用rails 3.0,我正在开发一个“项目管理”应用程序。我想复制一个Item,在我的例子中是“project”,同时复制属于该项的所有任务。

我用我在这里找到的代码填充了我的Item模型:http://www.redmine.org/projects/redmine/repository/revisions/2704/diff/trunk/app/models/project.rb,这似乎做了我想要的,但我不能让它适合我。

我希望您能提供任何帮助 - 一般或具体!谢谢!

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

class Item < ActiveRecord::Base
  belongs_to :customer
has_many :tasks

def copy(item)
item = item.is_a?(Item) ? item : Item.find(item)
Item.transaction do
  # Tasks
  item.tasks.each do |task|
    new_task = Task.new
    new_task.copy_from(task)
    self.tasks << new_task
  end
  self.save
  Hook.call_hook(:model_item_copy_before_save, :source_item => item, :destination_item => self)
end
end


def self.copy_from(item)
begin
  item = item.is_a?(Item) ? item : Item.find(item)
  if item
    # clear unique attributes
    attributes = item.attributes.dup.except('id')
    copy = Item.new(attributes)
    copy.enabled_modules = item.enabled_modules
    copy.trackers = item.trackers
    copy.custom_values = item.custom_values.collect {|v| v.clone}
    return copy
  else
    return nil
  end
 rescue ActiveRecord::RecordNotFound
  return nil
 end
end

另一件事 - 什么是Hook.call_hook ......?我在网上找不到任何引用

1 个答案:

答案 0 :(得分:0)

查看ActiveResource::Base#clone

它可能应该像:

@project = @project2.clone
@project.tasks << @project2.tasks.map(&:clone)
@project.save

修改

在您的模型环境中,您可以拥有:

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

然后在你的控制器中:

@project = Project.copy(@project_to_copy)
@project.save