2012-01-13 5 views
0

저는 레일즈 3.0에 있으며 "프로젝트 관리"응용 프로그램을 만들고 있습니다. 내 경우에는 "프로젝트"이고, 동시에 해당 항목에 속한 모든 작업을 복제하는 항목을 복제하고 싶습니다.동일한 모델에 속한 "작업"그룹을 복제하는 방법

내가 찾은 코드로 상품 모델을 채웠다 : 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

http://www.redmine.org/projects/redmine/repository/entry/trunk/lib/redmine/hook.rb – jibiel

답변

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 
+0

코드가 컨트롤러에 저장됩니까? 그렇다면 내 모델에서 절대적으로 필요한 것은 무엇입니까? 도와 주셔서 감사합니다! – FellyTone84

+0

예, 컨트롤러에서 사용할 수 있습니다. 모델 클래스 메서드를 포함하도록 내 대답을 편집했습니다. –

+0

굉장한 - 이것은 작동하는 것처럼 보인다! – FellyTone84

관련 문제