programing tip

.build, .create 및 .create의 차이점!

itbloger 2020. 5. 30. 22:17
반응형

.build, .create 및 .create의 차이점! 언제 사용해야합니까?


.build, .create 및 .create를 사용하는 사람들을 보았습니다. 그들의 컨트롤러 내에서 점점 더 최근에. .new를 사용하고 param'd 객체를 passig 한 다음 .save를 사용하는 것의 차이점은 무엇입니까? 장단점이 있습니까? 이러한 다른 방법을 사용하면 이점이 있습니까?


몇 가지 차이점이 있지만 크지 않습니다.

  1. .create.new뒤에 오는 것과 같습니다 .save. 더 간결합니다.
  2. .create!.new뒤에 오는 것과 같습니다 .save!(저장에 실패하면 오류가 발생 함). 또한 조금 더 짧습니다.
  3. 내 생각 .build이다 대부분 의 별칭 .new. 그것은 하나 개의 레일 3의 방식으로 작동 하고 레일에있는 또 다른 방법 <3.X를

그러나 가장 중요한 부분은 이러한 방법을 연결 ( has_many등)을 통해 호출 하여 두 모델을 자동으로 연결할 수 있다는 것입니다.


이 것이 정확하지만 create통화 new및 다음 save그 반환 값의 두 가지 대안 사이에 큰 차이가 있습니다.

Save반환 중 하나 true또는 false객체가 데이터베이스 여부에 성공적으로 저장되었는지 여부에 따라 달라집니다. 그런 다음 위 질문의 첫 번째 예에 따라 흐름 제어에 사용할 수 있습니다.

Create객체의 저장 여부에 관계없이 모델을 반환합니다. 이는 if객체의 유효성 검사에 실패하고 저장되지 않은 경우에도 명령문 의 최상위 분기 가 항상 실행 된다는 점에서 위의 코드에 영향을 미칩니다 .

create분기 논리와 함께 사용 하면 자동 실패의 위험이 있으며 new+ 를 사용하는 경우에는 그렇지 않습니다 save.

create! 레코드가 유효하지 않은 경우 발생하는 예외와 동일한 문제가 발생하지 않습니다.

create경우 대안은 컨트롤러에 유용 할 수있는 respond_withAPI (JSON / XML) 응답에 사용됩니다. 이 경우 객체에 오류가 unprocessable_entity있으면 API에서 원하는 상태 인 응답이 오류로 반환됩니다 .

흐름 제어를 위해 반환 값에 의존하는 경우 항상 html에 new+ save옵션을 사용합니다 .


#create는 더 짧은 버전의 new 및 save입니다. #창조하다! 유효성 검사가 긍정적이지 않으면 예외가 발생합니다.


위의 답변 중 두 번째입니다. 게다가 create, false당신이 할 수있는 인수로 전달할 수 없습니다 save. false인수로 전달하면 모든 레일 유효성 검사가 생략됩니다.

참고 URL : https://stackoverflow.com/questions/403671/the-differences-between-build-create-and-create-and-when-should-they-be-us

반응형