Как продублировать группу «заданий», принадлежащих одной модели - PullRequest
0 голосов
/ 13 января 2012

Я в rails 3.0 и работаю над приложением "Управление проектами".Я хотел бы продублировать Item, который в моем случае является «проектом», и в то же время дублировать все задачи, которые принадлежат этому элементу.

Я наполнил свою модель 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 голосов
/ 13 января 2012

Просмотр ActiveResource :: Base # clone .

Вероятно, должно работать что-то вроде:

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

EDIT:

В контексте вашей модели вы могли бы просто иметь:

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

Тогда в вашем контроллере:

@project = Project.copy(@project_to_copy)
@project.save
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...