답변:
Rails의 작성 작업에는 데이터베이스 작업 전 6 개의 콜백이 있고 이후에는 2 개의 콜백이 있습니다. 순서대로 다음과 같습니다.
before_validationbefore_validation_on_createafter_validationafter_validation_on_createbefore_savebefore_create
after_createafter_save업데이트 작업은 어디에서나 읽기 update대신 INSERT 대신 UPDATE 를 제외하고 정확히 동일한 세트를 갖습니다 .create
이것으로 before_saveand 및 before_create콜백 전에 유효성 검사가 수행되고 있음을 알 수 있습니다 .
이 before_save약간 전에 발생합니다 before_create. 내가 아는 한, 그들 사이에는 아무 일도 일어나지 않습니다. before_save업데이트 작업에서도 실행 되지만 before_createCreates에서만 실행됩니다.
after_save나 after_create?
after_save또는 after_create콜백 self에서 저장 후 존재하므로 방금 저장된 레코드입니다. 포함 자동 생성 필드이 좋아하는 그 id, created_at, updated_at.
before_create실제 create호출되는 메서드가 아니라 데이터베이스에 저장되는 새 개체를 나타냅니다 . 따라서이 방법으로 before_create도 여전히 해고 할 수 있습니다 save.
before_save3과 before_create5가 표시됩니다.
before_create vs before_save :on => :create
때로는 콜백 순서에주의해야합니다
자세한 내용은 여기를 참조하십시오 :
http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/
before_save :on => :create작동하지 않습니다 (적어도 레일 3.2에서)
before_save :generate_api_key, :if => :new_record?
before_validation_on_create및after_validation_on_create레일 (3)으로 제거 하는 대신 사용before_validation하고after_validation옵션으로 각각:on => :create.