`after_create`와`after_save`의 차이점은 무엇이며 언제 사용해야합니까?


124

인가 after_createafter_save기능에 따라 같은?

계정 생성 후 사용자의 이메일로 작업을하고 싶습니다.

데이터베이스에 저장 될 때 그 작업을하고 싶습니다.

다음 중 사용하는 것이 더 좋습니다. after_create또는 after_save?

답변:


212

after_create 레코드가 처음 생성 된 직후 한 번만 작동합니다.

after_save 개체를 저장할 때마다 작동 함-수년 후에 업데이트하는 경우에도

따라서이 이메일 작업을 한 번만 수행하고 다시는 수행하지 않으려면 after_create.

객체가 저장 될 때마다 수행하려면 다음에서 수행하십시오.after_save


2
독자는 문서에 따르면 ActiveRecord update_all는 다음을 포함한 어떠한 콜백도 호출하지 않는다는 점에 유의해야합니다.after_*
user2426679

93

에서 워드 프로세서 :

after_create()

Base.save아직 저장되지 않은 새 개체에 대해 호출 됩니다 (레코드가 없음).

after_save()

이후에 호출됩니다 Base.save (저장 생성 또는 업데이트 여부에 관계없이).


1
after_save()

자주 저장하지 않는 모델을 저장해야 할 때 잘 작동합니다. 레코드를 자주 변경하는이 특정 예의 경우 다음을 사용하는 것이 좋습니다.

 after_commit()

조치가 실행되기 전에 모델이 데이터베이스에 저장되었는지 확인하십시오 after_commit : calculate_credit_score

def calculate_credit_score
     #Call a Cron job
end

사용을 권 after_commit하지만 이유는 설명하지 않습니다. 자세히 설명해 주시겠습니까? 참고 after_commit실행가 UPDAT 생성하고 파괴한다. 문서 : apidock.com/rails/ActiveRecord/Transactions/ClassMethods/…after_save 레코드를 삭제 한 후 실제로 cron_job을 호출하고 싶은 것과 같은 동작이 아닙니다 . 아니면 ops의 경우 삭제 된 사용자에게 이메일을 보내시겠습니까? 사용에주의after_commit
rmcsharry

after_commitCRUD 작업에서 실행되므로 그의 경우 이메일이 자주 업데이트되면 특정 콜백에 대한 작업을 결합하는 것이 더 쉬울 것입니다. 제 경우에는after_commit : calculate_profile_update, on: :update
pensebien을
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.