我有一個問題,試圖克隆具有嵌套元素的對象。我知道如何完全克隆它,但我想克隆每個嵌套級別上的一些子元素。Ruby on rails克隆/重複與篩選嵌套元素
所以可以說我有結構像這樣,通過實例名稱即時決策(它不是實際情況)
class Town < ActiveRecord::Base
has_many :districts
has_many :buildings, through: :districts
class District < ActiveRecord::Base
belongs_to :town
has_many :buildings
class Building < ActiveRecord::Base
belongs_to :district
has_many :rooms
has_many :toilets
#and i have of course rooms and toilets with belongs_to relation to Building
所以basicaly,如果我想克隆整個現有城區對象我只想做一些像
Town.last.clone
但我想這樣做,而不是。我想複製現有的城鎮,然後根據我的收藏重新創建僅一些兒童物品。因此,如果城鎮有10個地區,我想只複製其中的一個,或者更多(基於我的收藏),然後地區有100個房屋,我將再次僅複製我需要的房間,直到房間和洗手間。所以我嘗試了這樣的事情。
#now i have these collections, i get them in some fashion, and they belong to Town(1) below
districts = District.find(1,2,3) #those ids are belonging to Town
buildings = Building.find(1,2,3) #those ids are belonging to districts above
rooms = Room.find(1,2,3,4,5,6) # and are belonging to some of buildings above
toilets = Toilet.find(1,2,3,4,5,6,7) #and are belonging to some of buildings
#so now i want to do this
old_town = Town.find(1)
new_town = old_town.dup.tap
districts.each od |district|
new_town.districts << district.dup
end
#and i get all the districts to new created town but when i try further in nesting it wont work, like this
districts.each od |district|
new_town.districts << district.dup
buildings.each do |building|
district.buildings << building.dup
end
end
#and so on inside it for toilets and rooms it just wont work, like it doesnt attach them to new_town. What am i doing wrong?
所以我只是想選擇性的dup /克隆過濾元素屬於父母。彼此尊重他們的關係。
謝謝分配。
您是否想將建築物的重複項目放入屬於新城鎮的區域?如果是這樣的話:'district.buildings << building.dup'應該改變,所以'#buildings'的接收者是重複的區域。 Btw。這些:: find方法真的很混亂。 – DiodonHystrix
嗨,是的,我正在嘗試添加建築物重複項,以便將它附加到我創建的區域重複項。我怎麼能做到這一點?現在我有點困惑,我知道你在說什麼,但不知道如何在同一個循環中實現這一點。而對於廁所和房間,我以同樣的方式做對吧? – Tester