Ruby on Rails:save と save! メソッドの違い

savesave! は、インスタンスを生成した後に使う。どちらもデータのバリデーション(データベースに保存する前に、データ自体の妥当性を検証する仕組み)と、データベースへの保存を行うメソッド。

  def create
  @report = current_user.reports.new(report_params)

  respond_to do |format|
    if @report.save
      format.html { redirect_to report_url(@report) }
    else
      format.html { render :new }
    end
  end
end

違いをまとめると、下記のようになる。

項目 保存成功時の戻り値 保存失敗時の戻り値
save true false
save! true 例外

上記の通り、if/else で処理を分けたい時には save メソッドを用いる。

一方、save! メソッドでは、失敗時に例外が発生するため、保存できない場合の処理は rescue 節で対処する。