どちらもレコードをつくるときのメソッドですが、何が違うのだろうと疑問に思ったので調べました。
new + save を使うべき場合
①コントローラー内で、条件分岐させたいとき
例えばArticleモデルでバリデーションの設定をしていて、
保存時にバリデーションを適用させたいときにはif文等で条件分岐の記述をしますが、
その場合は以下のようにnew + save メソッドを使います。
理由:createメソッドでは、たとえ保存に失敗してもオブジェクトを返すためif文がtrueとなり成功時の処理を行ってしまうからです。
def create
@article = Article.new(article_params)
if @article.save
redirect_to("該当パス")
else
flash.now[:alert] = '文字を入力してください。'
render :index
end
end
②view側で使いたいとき
例えば Book モデルを操作する BooksController があったとする。
new アクションを
def new
@book = Book.new
end
などと書いておいて、この @book を入力フォームで使いたい、そんな場合にもnew + save を使う。
create を使うべき場合
インスタンス生成と保存を同時に行いたいとき。
参考にさせていただいた記事
【Rails】createメソッドとnew + saveメソッドの違い
【Rails】newとcreateの違い
newとcreateの違い
new,save,createアクションそれぞれの使い分け