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 のメソッドで、新しいオブジェクトを作成し、データベースに保存するために使用されます。
- 内部で
new
とsave
を組み合わせた処理を行います。すなわち、新しいオブジェクトを生成し、それをすぐにデータベースに保存します。 - モデルに関連付けられたメソッドとして、簡潔にオブジェクトを作成および保存するために使用されます。
まとめ
-
new
メソッドを使用した場合は、生成したオブジェクトを保存するためにsave
メソッドを呼び出す必要があります。 -
create
メソッドを使用した場合は、オブジェクトの生成と保存を同時に行うため、save
メソッドを明示的に呼び出す必要はありません。