programing

모델에서 언제`save`와`save!`를 사용해야합니까?

nasanasas 2020. 12. 10. 20:29
반응형

모델에서 언제`save`와`save!`를 사용해야합니까?


당신의 머리세이브 뱅 에 따르면 , 액티브 레코드는 당신을 미치게 할 것입니다 , 우리는 예외적 인 상황에서 사용 save!rescue관용구를 피해야 합니다. 이를 감안할 때 모델이 @post.mark_rejected.

mark_rejected아래 문제 중 하나로 인해 코드가 실패하면 예외가 발생해야합니까? :

  • 유효성 검사 문제가있는 경우
  • nullable이 아닌 필드에 null이 할당 된 경우
  • 데이터베이스 연결이 끊어진 경우

예외를 throw하지 않으면 다음과 같습니다.

  • 컨트롤러 작업은 반환 값을 확인 mark_rejected해야 할 것입니다.
  • 우리는 그 메소드 호출에서 예외를 기대하지 않습니다. 그래서 우리는 rescue컨트롤러 액션에 절을 작성하지 않습니다 . 따라서 예외는 (..wherever ..)까지 버블 링되고 아마도 (500 HTTP?) 오류로 나타날 것입니다.

예제 코드 :

def mark_rejected
  ...
  save!
end

또는

def mark_rejected
  ...
  save
end

예외에 더 많은 오버 헤드가 있으므로 특히 .NET의 경우와 같이 자주 발생할 것으로 예상되는 경우 성능 문제가 있습니다 save.

예외를 구하는 것보다 반환 값이 거짓인지 확인하는 코드 줄이 적기 때문에 이미 예외를 구해야하는 경우 반환 값을 확인해야하는 문제가 무엇인지 알 수 없습니다. 던져진 예외 save!가 실제로 얼마나 자주 호출 스택을 버블 업해야합니까? 내 경험상 드물게.

호출시 예외가 발생하는 경우 save와 반대로 save!500 오류 페이지를 표시해야합니다. 복구 불가능하고 알 수없는 예기치 않은 내부 서버 오류입니다.


save! 성공하지 못하면 오류가 발생합니다.

save true 또는 false와 같은 부울 값을 반환합니다.


제안 : save마지막 줄에있을 때 사용 하십시오. save!그렇지 않으면.

아이디어 : 메서드가 저장 결과를 반환하는 경우 예외를 throw해서는 안되며 호출자가 저장 문제를 처리하도록해야하지만 저장이 모델 메서드 논리 내에 묻혀 있으면 실패시 예외와 함께 프로세스를 중단하고 싶을 것입니다.

참고 URL : https://stackoverflow.com/questions/5056385/when-to-use-save-vs-save-in-model

반응형