save
と save!
は、インスタンスを生成した後に使う。どちらもデータのバリデーション(データベースに保存する前に、データ自体の妥当性を検証する仕組み)と、データベースへの保存を行うメソッド。
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
節で対処する。