0
0

【Rails】newメソッドとcreateメソッドの違い

Posted at

new メソッド

  • オブジェクトを生成しますが、それをデータベースに保存しません。
  • オブジェクトを保存するためには、明示的に save メソッドを呼び出す必要があります。

create メソッド

  • オブジェクトを生成し、すぐにデータベースに保存します。
  • 内部で new と save の両方を行います。



create アクションのnewメソッド

以下のコードは new メソッドを使用しているため、save メソッドを呼び出す必要があります。

Ruby
def create
    @question = Question.new(question_params)
    if @question.save
      redirect_to @question
    else
      render 'new', status: :unprocessable_entity
    end
  end

Answer コントローラの create アクション

一方、Answer の登録では create メソッドを使用しているため、save メソッドを明示的に呼び出す必要がありません。

Ruby
def create
    @question = Question.find(params[:question_id])
    @answer = @question.answers.create(answer_params)
    
    if @answer.persisted?
      redirect_to question_path(@question), notice: '回答が正常に作成されました。'
    else
      render '表示画面', status: :unprocessable_entity
    end
  end

persisted?
説明:保存済みかチェック
ドキュメント:https://railsdoc.com/page/model_persisted_q



create アクションと create メソッド

createアクションとcreateメソッドは別物と考える

create アクション

  • Rails コントローラ内のアクションの一つで、通常は新しいレコードをデータベースに保存するために使用されます。

  • フォームから送信されたデータを受け取り、新しいオブジェクトを作成し、それをデータベースに保存する処理を行います。

  • アクションは、ブラウザからのリクエストを処理し、ビューをレンダリングしたりリダイレクトしたりする役割を持ちます。

create メソッド

  • ActiveRecord のメソッドで、新しいオブジェクトを作成し、データベースに保存するために使用されます。
  • 内部で newsave を組み合わせた処理を行います。すなわち、新しいオブジェクトを生成し、それをすぐにデータベースに保存します。
  • モデルに関連付けられたメソッドとして、簡潔にオブジェクトを作成および保存するために使用されます。



まとめ

  • new メソッドを使用した場合は、生成したオブジェクトを保存するために save メソッドを呼び出す必要があります。
  • create メソッドを使用した場合は、オブジェクトの生成と保存を同時に行うため、save メソッドを明示的に呼び出す必要はありません。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0