2017-04-02 3 views
0

내가 (활동 모델에서 코드) 조상 모델의 모든 형제 자매의 부모를 변경하려고 지속 :레일 : 조상의 부모를 업데이트하지

def change_parents_of_siblings 
    to_change = self.siblings.where.not(id: self.id) 
    to_change.each do |sib| 
    sib.update!(parent: self) 
    end 
end 

나는 함수 내부의 모든 ID를 인쇄하는 경우 (같은 sib.id, ...) 그것이 작동하는 것 같습니다 콘솔. 그러나 함수 호출 후에 이러한 변경 사항 중 하나도 유지되지 않습니다. 예 :

@activity1 = Activity.create(name:"test1") 
@activity2 = Activity.create(name:"test2", parent_id: @activity1.id) 
@activity15 = Activity.create(name:"test1.5", parent_id: @activity1.id) 
@activity15.change_parents_of_siblings 

expect(@activity2.parent_id).to eq(@activity15.id) 

이 실패합니다.

+0

무엇이'self.siblings'입니까? 당신은'Activity'의 모든 형제들에 부모를 설정하려하지만,'Activity'의 parent_id가 바뀔 것으로 예상합니까? 그리고 관계에 대해 더 많이 말해 줄 수 있겠습니까? 어느 쪽이 다른 쪽과 다른쪽에 속해 있는지. –

+0

질문은 조상 보석과 관련이 있습니다. 이 has_ancestry 액티비티는 parent와 parent_id와 같은 조상 관련 애트리뷰트와 루트, 아이, 형제, ... 같은 조상 인스턴스 메소드를 갖습니다. AR과 관련된 협회는 없습니다. – RicciFlowing

답변

1

목욕 후 나는 스스로 문제를 발견했습니다.

change_parents_of_siblings 메서드는 데이터베이스에서 조상을 변경했습니다. Rails가 모델 변경으로 인식하지 않습니다.

그래서 다시 사용하기 전에 @activity2.reload으로 전화해야했습니다.

죄송합니다.

+0

디버깅에 대한 매우 좋은 접근법 : 긴 온수욕을 복용 : D – Tilo