.build, .create 및 .create를 사용하는 사람들을 보았습니다. 그들의 컨트롤러 내에서 점점 더 최근에. .new를 사용하고 param’d 객체를 passig 한 다음 .save를 사용하는 것의 차이점은 무엇입니까? 장단점이 있습니까? 이러한 다른 방법을 사용하면 이점이 있습니까?
답변
몇 가지 차이점이 있지만 크지 않습니다.
.create
.new
뒤에 오는 것과 같습니다..save
. 더 간결합니다..create!
.new
뒤에 오는 것과 같습니다.save!
(저장에 실패하면 오류가 발생 함). 또한 조금 더 짧습니다.- 내 생각
.build
이다 대부분 의 별칭.new
. 그것은 하나 개의 레일 3의 방식으로 작동 하고 레일에있는 또 다른 방법 <3.X를
그러나 가장 중요한 부분은 이러한 메소드를 연결 ( has_many
등)을 통해 호출 하여 두 모델을 자동으로 연결할 수 있다는 것입니다.
답변
그 create
전화 new
를 한 다음 맞습니다save
그 반환 값의 두 가지 대안 사이에 큰 차이가 있습니다.
Save
반환하거나 true
또는false
객체가 데이터베이스 여부에 성공적으로 저장되었는지 여부에 따라 달라집니다. 그런 다음 위 질문의 첫 번째 예에 따라 흐름 제어에 사용할 수 있습니다.
Create
객체의 저장 여부에 관계없이 모델을 반환합니다. 이것은 위의 코드가 최상위 분기에서if
객체의 유효성 검사에 실패하고 저장되지 않은 경우에도 명령문 가 항상 실행 .
당신이 사용하는 경우 create
분기 논리를 당신은 당신이 사용하는 경우이 아니다있는 침묵 실패의 위험이있는 new
+를 save
.
create!
레코드가 유효하지 않은 경우 발생하는 예외와 동일한 문제가 발생하지 않습니다.
create
경우 대안은 컨트롤러에 유용 할 수있는 respond_with
API (JSON / XML) 응답에 사용됩니다. 이 경우 객체에 오류가 unprocessable_entity
있으면 API에서 원하는 것과 정확히 같은 상태 인 응답으로 오류가 반환됩니다 .
흐름 제어를 위해 반환 값에 의존하는 경우 항상 html에 new
+ save
옵션을 사용합니다 .
답변
#create는 더 짧은 버전의 new 및 save입니다. #창조하다! 유효성 검사가 긍정적이지 않으면 예외가 발생합니다.
답변
위의 답변 중 두 번째입니다. 게다가 create
, false
당신이 할 수있는 인수로 전달할 수 없습니다 save
. false
인수로 전달하면 모든 레일 유효성 검사가 생략됩니다.