[ruby-on-rails] 새로운 레일 대 생성
RESTful 컨트롤러에서 새 메소드를 정의해야하는 이유는 무엇이며 작성 메소드로 후속 조치를 수행해야합니까?
Google 검색에서 원하는 답변을 얻지 못했습니다. 나는 그 차이점을 이해하지만 그들이 왜 그렇게 사용되는지 알아야합니다.
답변
Rails의 REST 구현에서 new 와 create 는 다르게 취급됩니다.
는 HTTP GET에 /resources/new
호출하여이하는 새로운 자원을 생성에 적합한 형태로 렌더링하기위한 것입니다 새를 , 컨트롤러 조치 저장하지 않은 새 레코드를 작성하고 양식을 렌더링합니다.
HTTP POST /resources
는 새 조치의 일부로 작성된 레코드 를 가져 와서 제어기 내의 작성 조치로 전달한 다음 데이터베이스에 저장하려고합니다.
답변
로부터 액티브 :: 자료 문서 :
작성 (속성 = nil) {| object | …}
유효성 검사가 통과되면 개체 (또는 여러 개체)를 만들어 데이터베이스에 저장합니다. 결과 오브젝트는 오브젝트가 데이터베이스에 성공적으로 저장되었는지 여부에 관계없이 리턴됩니다.
new (속성 = nil) {| self_block_given? | …}
새 객체는 비어 있거나 (구성 매개 변수를 전달하지 않음) 속성을 사용하여 사전 설정되어 있지만 아직 저장되지 않은 상태로 인스턴스화 할 수 있습니다 (관련 테이블 열 이름과 일치하는 키 이름을 가진 해시를 전달). 두 경우 모두 유효한 속성 키는 연결된 테이블의 열 이름에 따라 결정되므로 테이블 열에 속하지 않은 속성을 가질 수 없습니다.
따라서 create
새 개체를 인스턴스화하고 유효성을 검사 한 다음 데이터베이스에 저장합니다. 또한 new
로컬 객체 만 생성하지만 DB에 유효성 검증 또는 저장을 시도하지는 않습니다.
답변
New는 새 Model 인스턴스를 인스턴스화하지만 save 메소드가 호출 될 때까지 저장되지 않습니다.
Create는 new와 동일하지만 데이터베이스에 저장합니다.
때로는 데이터베이스에 무언가를 저장하기 전에 무언가를하고 싶을 때가 있습니다.
답변
Rails의 RESTful 부분은 HTTP 프로토콜의 작동 방식에 매우 가깝습니다. HTTP 프로토콜에서 GET 요청은 데이터를 수정하지 않아야합니다. 논리적으로 Rails의 모든 RESTful 작업이 작동하는 방식을 살펴보면 HTTP 작업과 일치합니다. POST는 새 데이터를 생성하기위한 것으로 논리적으로 생성됩니다. GET을 사용하여 양식 버전 또는 다른 방식으로 새 조치를 제공합니다. 인덱스와 쇼도 GET이고, 업데이트는 PUT (또는 Rails 4+의 PATCH)이며, destroy는 HTTP의 DELETE입니다.
또한 컨트롤러의 로직을 멋지게 분리하고 오류 메시지를 사용하여 새 작업을 다시 렌더링하여 오류를 원활하게 처리 할 수 있습니다.