我有一個表與五個不同的關係到其他表。在刪除記錄之前,我需要將其所有子項移至另一個記錄。要做到這一點,我僱用以下代碼:ActiveRecord將所有的孩子移動到另一個記錄
self.class.reflect_on_all_associations.select {|assoc| assoc.macro == :has_many }.each do |assoc|
target.send(assoc.name) << self.send(assoc.name)
end
基本上,這歸結爲target.child-association << self.child-association
。但是這不能正常工作,從「self」中刪除所有的孩子,並添加一個孩子到「目標」,除了關聯的字段爲空之外的所有字段。我認爲這是因爲「< <」期望有記錄,並且我傳遞了一系列記錄。我看到「< <」也接受參數列表,所以我認爲我需要類似target.send(assoc.name) << *self.send(assoc. name)
(注意splat操作符),但我無法弄清楚這樣做的有效語法。所以我的問題是兩個:
- 你如何「啪」一個任意數組輸入到「< <」?
- 是否需要讓孩子重新分配工作正確?