Ruby on rails 如何复制一组;任务“;属于同一型号的

Ruby on rails 如何复制一组;任务“;属于同一型号的,ruby-on-rails,ruby,templates,copy,project,Ruby On Rails,Ruby,Templates,Copy,Project,我在rails 3.0中,正在开发一个“项目管理”应用程序。我想复制一个项目,在我的例子中是“项目”,同时复制属于该项目的所有任务 我用我在这里找到的代码填充了我的项目模型:,这似乎满足了我的需求,但我无法让它为我工作 我想要你能提供的任何帮助——一般的或具体的!谢谢 class Task < ActiveRecord::Base belongs_to :department belongs_to :item belongs_to :customer end class It

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

我用我在这里找到的代码填充了我的项目模型:,这似乎满足了我的需求,但我无法让它为我工作

我想要你能提供的任何帮助——一般的或具体的!谢谢

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
类任务self)
终止
终止
定义自复制自(项目)
开始
项目=项目。项目是一个吗?(项目)?项:项。查找(项)
如果项
#清除唯一属性
attributes=item.attributes.dup.except('id')
复制=项。新建(属性)
copy.enabled_modules=item.enabled_modules
copy.trackers=item.trackers
copy.custom_values=item.custom_values.collect{v | v.clone}
返回副本
其他的
归零
终止
rescue ActiveRecord::RecordNotFound
归零
终止
终止
还有一件事,什么是钩子,叫钩子。。。?我在网上找不到任何有关这方面的参考资料

它的工作原理可能如下:

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

您的代码是否进入控制器?如果是的话,我的模型中有什么是绝对必要的?谢谢你的帮助!是的,您可以在控制器中使用它。我已经编辑了我的答案,包括一个模型类方法,以及.xnm,快速问题:复制一个项目时,我将如何自定义字段?如何为所有任务重置特定字段?我感谢你的帮助!
def self.copy(item)
  newitem = item.clone
  newitem.tasks << item.tasks.map(&:clone)
  return newitem
end
@project = Project.copy(@project_to_copy)
@project.save