.build, .create 및 .create의 차이점! 언제 사용해야합니까?
.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
인수로 전달하면 모든 레일 유효성 검사가 생략됩니다.
'programing tip' 카테고리의 다른 글
모든 DNS 레코드를 어떻게 나열합니까? (0) | 2020.05.30 |
---|---|
저장 프로 시저에서 "SET XACT_ABORT ON"을 사용하면 어떤 이점이 있습니까? (0) | 2020.05.30 |
"OR"을 사용하여 여러 조건을 결합하여 데이터 프레임의 하위 세트를 만드는 방법은 무엇입니까? (0) | 2020.05.30 |
Java의 콜백 함수 (0) | 2020.05.30 |
C ++에서 텍스트 파일에 텍스트를 추가하는 방법은 무엇입니까? (0) | 2020.05.30 |