我在使用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 ......?我在网上找不到任何引用
答案 0 :(得分:0)
它可能应该像:
@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