考慮這個簡單的has_many關係:ActiveRecord的:治療的has_many列表作爲一個簡單的數組
class Basket < ActiveRecord::Base
has_many :apples
...
end
class Apple < ActiveRecord::Base
belongs_to :basket
end
現在,我在籃下類中的方法,其中,我要創建「蘋果」數組的臨時副本並操縱臨時副本。對於初學者來說,我想一個新的元素添加到臨時副本如下:
class Basket < ActiveRecord::Base
has_many :apples
def do_something
#create a temporary working copy of the apples array
temp_array = self.apples
#create a new Apple object to insert in the temporary array
temp_apple = Apple.new
#add to my temporary array only
temp_array << temp_apple
#Problem! temp_apple.validate gets called but I don't want it to.
end
end
當我這樣做,我發現,驗證程序被調用的臨時蘋果對象上,當我嘗試將其添加到我的臨時陣列。我創建臨時數組的所有原因是爲了避免主數組帶來的所有行爲,例如驗證,數據庫插入等...
這就是說,我確實找到了一種蠻力方式避免這個問題的產生在時間temp_array一個對象的for循環如下所示。這有效,但它很醜。我想知道是否有一個更優雅的方式來實現這一點。
class Basket < ActiveRecord::Base
has_many :apples
def do_something
#create a temporary working copy of the apples array
temp_array = []
for x in self.apples
temp_array << x
end
#create a new Apple object to insert in the temporary array
temp_apple = Apple.new
#add to my temporary array only
temp_array << temp_apple
#Yippee! the temp_apple.validate routine doesn't get called this time!.
end
end
如果有人比我聽到的更好的解決方案,我很樂意聽到它。
謝謝!
這做到了。非常感謝! – Denis