2

ActiveRecord::Base까지 확장되는 특정 클래스에서이 클래스가 생성 될 때마다 다른 ActiveRecord 객체를 업데이트해야합니다. save 메서드를 무시하고 저장시 다음을 수행하는 것이 안전합니까?ActiveRecord의 저장 방법을 재정의 할 수 있습니까?

def save 
    super 
    other = self.other 
    other.name = self.name 
    other.save! 
end 

잠재적 인 트랜잭션 관련 문제가 걱정됩니다. 이 모든 것이 1 트랜잭션이 될 것이라고 가정합니다. 어떤 부분이 실패하면 모든 것이 롤백됩니까?

+0

update_attribute가이 메서드를 사용하고 매개 변수를 전달하기 때문에 해시 매개 변수를 허용해야합니다. 'def save args = {} super args ... ' 콜백을 사용하기위한 아래의 대답은 저장이 사용되는 모든 상황을 포함하는지 잘 모르겠지만 훨씬 안전하고 효과적입니다. – ryan2johnson9

답변

14

이 목적으로 제공되는 후크를 사용하지 않는 특별한 이유가 있습니까? 당신이있어

after_create, after_save, after_update, before_create, before_save, before_update - 다른 사람의 무리. 그 중 하나가 적합하지 않을까요?

실제로 두 번째 모델을 저장하는 동안 발생하는 오류를 잡아서 첫 번째 모델을 저장하지 못하도록하므로 (before_save이 원하는 것 같습니다. before_save 호출).

+0

나는이 후크에 대해 몰랐습니다. 감사합니다! –

+0

기꺼이 도와 드리겠습니다 :) 행운을 빈다. –

관련 문제