Sevin
September 1, 2010, 4:05pm
1
Witam mam następujący problem
Mam model Strona który ma wiele kontenerów, potrzebuje zrobić funkcję która sklonuje mi daną stronę wraz z kontenerami.
Próbowałem robić to na kilka sposobów:
[code]cloning_page = Page.find_by_id(data[:page_id])
page = self.pages.new
1#page.boxes = cloning_page.boxes
2#page.boxes.new(cloning_page.boxes)
3#cloning_page.boxes.each do |box|
#page .boxes.new(box)
#end
page.save[/code]
Jak powinienem zrobić to poprawnie, aby po stworzeniu strony skopiować dla niej wszystkie boxy z innej?
z góry dziękuje za odpwoiedzi
sevos
September 1, 2010, 4:24pm
2
Czesc, na szybko.
Jeżeli nie zależy Ci na timestampach created/updated_at (które w poniższym przykładzie również sa klonowane), możesz zrobić coś takiego. Poniższy przykłąd zakłada, że w hashu attributes jest dodatkowy (poza np. title, description) klucz o nazwie page_id.
[code=ruby]class Page < ActiveRecord::Base
has_many :boxes
def self.create_with!(attributes)
cloning_page = Page.find_by_id(attributes.delete(:page_id))
returning Page.create!(attributes) do |new_page|
cloning_page.boxes.each { |box| new_page.boxes.create!(box.attributes) }
end
end
end[/code]
phocke
September 1, 2010, 9:59pm
3