我有一张表,它与其他表有五种不同的多对多关系。在删除一条记录之前,我需要将其所有子项移动到另一条记录。为此,我使用以下代码:
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”,除关联字段 null 之外的所有字段。我认为这是因为“<<”需要一条记录,而我正在传递一组记录。我看到“<<”也接受参数列表,所以我认为我需要类似target.send(assoc.name) << *self.send(assoc. name)
的东西(注意 splat 运算符),但我无法找出有效的语法来执行此操作。所以我的问题有两个:
- 你如何“splat”一个任意数组以输入“<<”?
- 这是使儿童重新分配正常工作所需要的吗?