2
5

More than 3 years have passed since last update.

複数のカラムを更新するメソッドまとめ【Ruby on Rails】

Last updated at Posted at 2020-06-09

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

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5