다른 테이블과 5 가지 다 관계가있는 테이블이 있습니다. 레코드를 삭제하기 전에 모든 자식을 다른 레코드로 이동해야합니다.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"에서 삭제하고 하나의 자식을 관련 필드 null을 제외한 모든 필드와 함께 "target"에 추가합니다. 나는 이것이 "< <"이 레코드를 기대하고 레코드 배열을 전달하기 때문이라고 생각합니다. 나는 "< <"도 인수 목록을 받아들이므로 target.send(assoc.name) << *self.send(assoc. name)
(splat 연산자에 유의하십시오)과 같은 것이 필요하다고 생각합니다. 그러나이 작업을위한 올바른 구문을 이해할 수 없습니다. 그래서 제 질문은 두 가지가 있습니다 :
- 어떻게 당신 "플랫" "< <"에 입력에 대한 임의의 배열?
- 자식 재 할당을 올바르게 수행하는 데 필요한 것은 무엇입니까?
1) target.send (assoc.name) .send (: < < * (self.send (assoc.name)))