Railsには複数のカラムを同時に更新するメソッドが複数あるため、違いをまとめました。
assign_attributes
特徴
- DBの保存はされない。
- alias(別名) は attributes=
使用例 (Userというテーブルがある場合)
user = User.first
user.assign_attributes(family_name: "foo", given_name: "bar")
user.save
#attribute=の場合
user.attributes = { family_name: "foo", given_name: "bar" }
保存はされないので、saveを呼び出す必要があります。
update_attributes
特徴
- DBに保存される。
- alias(別名) は update
- バリデーションのチェックやコールバックの呼び出しも行われる。
- 保存の可否をtrueかfalseで返す。
使用例
user = User.first
user.update_attributes(family_name: "foo", given_name: "bar")
#updateの場合
user.update(family_name: "foo", given_name: "bar")
saveを別途に呼び出す必要はありません。
update_attributes!
特徴
- 保存に失敗した場合、例外が発生する。
- aliasはupdate!
使用例
user = User.first
user.update_attributes!(family_name: "foo", given_name: "bar")
#update!の場合
user.update!(family_name: "foo", given_name: "bar")
update_attributesとは結果の返し方が異なります。
update_columns
特徴
- データベースに直接アクセスするため、最も更新速度が速い。
- バリデーションのチェックやコールバックの呼び出しが行われない。
- update_atが更新されない。
使用例
user = User.first
user.update_columns(family_name: "foo", given_name: "bar")
バリデーションのチェックやコールバックの呼び出しがないので注意が必要です。
参考
https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update_attributes