[Rails] new 방법, save 방법,build 방법,create 방법의 차이점을 배워봤습니다.

7723 단어 초학자RubyRails
나는 레일스와 매일 격투하는'초'자가 붙은 초보자다.
자신의 지식을 정리하기 위해 공유하다.

대상 시스템을 만드는 방법이 많지 않습니까?


나는 교재를 한쪽에 놓고 읽을 때 줄곧 이 사실을 알아차리지 못했다. 며칠 전에
"어,난 new 방법인 줄 알았는데,여기서create 방법을 쓰는구나...
잘 생각해보면 build 같은 것도 있지...What?!」
이런 상태가 됐기 때문에 제가 직접 조사해 보고 싶어요.
짧은 기사지만 끝까지 함께 해주세요.

new 방법 &save 방법


우선, new 방법의 기본적인 사용 방법부터 시작한다.
그나저나 북모델 투고를 전제로 쓴 것이다.
books_controller
def new
  @book = Book.new
end
Book.새 에 Book 클래스의 빈 인스턴스를 만들고 인스턴스 변수@book에 대입합니다.
"이런 일은 누구나 다 안다."
이전에 나도 이렇게 생각했는데, 뜻밖에도 new 방법으로 매개 변수를 지정하는 방법이 있었다.
이것이 바로
books_controller
def new
  @book = Book.new(title: "羅生門", author:"芥川龍之介")
# titleを「羅生門」、authorを「芥川龍之介」としています。
end
이렇게 되면 책의 새 투고를 진행하면 입력란에 어떤 문자를 입력해도 나생문 밖으로 로그인할 수 없다(웃음)
새로운 방법은 빈 실례를 통해서만 있는 것이 아니다.
아는 사람은 떳떳하지 못하다.
new 방법 이후create 동작에서save 방법으로 데이터를 저장합니다.
이것이 바로
books_controller
def create
  @book = Book.new(book_params)
  @book.save
end
이렇게 하면 드디어 북의 데이터베이스에 새로 등록할 수 있다.
save 방법을 사용할 때 new 방법과 함께 데이터베이스에 저장할 수 있습니다.

create 메서드 정보


소문난 크리에이트 방법이 여기 등장한다.
상기 new 방법,save 방법으로 저장하는 절차는create 방법이라면 한 줄만 있으면 끝낼 수 있습니다.
뭐랄까
books_controller
def create
  Book.create(title: "羅生門", author:"芥川龍之介")
end
이렇게 하면 데이터베이스에 저장할 수 있다.
데이터를 저장할 수 있을 뿐만 아니라 모델 실례도 동시에 생성할 수 있다.
정보가 간단하다.낙타
기본 문법
モデル名.create(カラム名: "値")
반복,create 방법은 new와save를 동시에 진행하는 방법입니다.
그럼,create 방법만 사용할까요?
이런 천박한 생각은 곧 끓어오를 것 같지만, 결코 그렇게 쉽지는 않다.

어떻게 구분해서 사용해야 되지?


생성된 실례를 사용하여 일부 조작을 하려면create 방법을 사용할 수 없기 때문에 new 방법과save 방법의 형식을 사용합니다.
구체적으로 말하면
1. if를 이용해 조건부 분기를 만들고 싶을 때
2. 렌더에 오류 메시지를 보내고 싶을 때
등, 아래 설명.

if의 조건 지점을 이용하다


users_controller.rb
def create
  @user = User.new(user_params) #インスタンス変数を作成
  if @user.save
    redirect_to @user, notice: 'ユーザー作成完了'
  else
    render :new #saveできなかった時のrender先
  end
end
이렇게 하면 실례 변수를 사용하여 성공 모드와 실패 모드 등으로 나누고, 조건이 갈라지면 new 방법과save 방법을 사용합니다.

ηrender에서 오류 메시지 보내기


예를 들어 새로운 투고하는 화면(new 동작)에서 발리는 일일 검사 작업을 하기 때문에 투고할 수 없다.
그때는 투고란에 잘못된 정보가 나오면 알기 쉽다.
구체적으로 설명해 주세요.
books_controller
def new
  @book = Book.new
end

def create
  @book = Book.new(params[:id])
  if  @book.save
      redirect_to book_path(@book.id)
  else
      render 'layouts/errors'
  end
end
views/books/new.html.erb
<h1>New Book</h1>
<%= render 'layouts/errors', obj: @book %>
#省略
layouts/_errors.html.erb
<% if obj.errors.any? %>  #objに@bookを代入
  <div id="error_explanation">
    <h3><%= pluralize(obj.errors.count, "error") %> prohibited this obj from being saved:</h3>

    <ul>
    <% obj.errors.full_messages.each do |message| %>
      <li><%= message %></li>
    <% end %>
    </ul>
  </div>
<% end %>
위에서 말한 바와 같이 new 방법이 포함된 실례 변수를 사용하면 오류 메시지를 보낼 때create 방법만으로는 불가능하다.
아무래도 생각해야 할 게 많을 것 같은데...

build 메서드 정보


마침내 최후의 방법이 왔다.
하지만 중요도가 가장 낮다고 생각합니다.
현행 rails에서 new 방법과build 방법은 거의 같은 작업이기 때문이다.
구 버전의 rails는 관련이 있을 때 자동으로 외부 키와 같은 차이가 있는지 여부입니다. 그러나 현재 new 방법과build 방법은 모두 외부 키를 설정했습니다.
직장에 따라 특정 장소에서build을 추천하는 경우도 있는데, 그렇지 않다면 new 방법의 통일도 문제없겠죠.

끝말


이번에도 많이 배웠어요.
'이게 도대체 어떻게 된 일인지 나는 안다'고 느낀 일이라도 깊이 파고들수록 새로운 발견이 나온다.
나는 앞으로도 열심히 공부할 것이다.

좋은 웹페이지 즐겨찾기