[ruby-on-rails] .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인수로 전달하면 모든 레일 유효성 검사가 생략됩니다.


답변