Ruby on Rails 콜백, : before_save와 : before_create의 차이점은 무엇입니까?


184

당신은 자세히 설명 할 수 무엇 :before_save:before_create루비 콜백은 레일, 그리고 그들이 레일 검증하고 관계에? :before_save또는 이후에 유효성 검사가 발생합니까 :before_create?

답변:


363

Rails의 작성 작업에는 데이터베이스 작업 전 6 개의 콜백이 있고 이후에는 2 개의 콜백이 있습니다. 순서대로 다음과 같습니다.

  1. before_validation
  2. before_validation_on_create
  3. after_validation
  4. after_validation_on_create
  5. before_save
  6. before_create

    데이터베이스 삽입
  7. after_create
  8. after_save

업데이트 작업은 어디에서나 읽기 update대신 INSERT 대신 UPDATE 를 제외하고 정확히 동일한 세트를 갖습니다 .create

이것으로 before_saveand 및 before_create콜백 전에 유효성 검사가 수행되고 있음을 알 수 있습니다 .

before_save약간 전에 발생합니다 before_create. 내가 아는 한, 그들 사이에는 아무 일도 일어나지 않습니다. before_save업데이트 작업에서도 실행 되지만 before_createCreates에서만 실행됩니다.


27
before_validation_on_createafter_validation_on_create레일 (3)으로 제거 하는 대신 사용 before_validation하고 after_validation옵션으로 각각 :on => :create.
일요일

당신은 어떻게 사용할 때 방금 만든 기록을 참조 할 after_saveafter_create?
bcackerman

@bcackerman- after_save또는 after_create콜백 self에서 저장 후 존재하므로 방금 저장된 레코드입니다. 포함 자동 생성 필드이 좋아하는 그 id, created_at, updated_at.
Chowlett

또한 before_create실제 create호출되는 메서드가 아니라 데이터베이스에 저장되는 새 개체를 나타냅니다 . 따라서이 방법으로 before_create도 여전히 해고 할 수 있습니다 save.
Steve

1
@Rads-어, 아니? 문서에는 여전히 before_save3과 before_create5가 표시됩니다.
Chowlett

136

before_save객체가 저장 될 때마다 호출됩니다. 새로운 객체와 기존 객체의 경우 (활동 작성 및 업데이트)

before_create창조하기 전에 만. 새로운 객체에 대해서만 (액션 생성)


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.