【Rails】updateとupdate_allでデータを更新する方法を解説します

updateメソッドとは

updateメソッドは、テーブルに保存されているデータの情報を新しくするメソッドです。

引数に更新したい情報を指定して、以下のように記述します。

モデルのインスタンス.update(更新する情報)

参考例

@user = User.find(1)
@user.update(name: '佐藤')

上記の例だと、まずUserのid: 1のレコードをインスタンス変数に代入します。

その変数に対して、updateメソッドでnameを’佐藤’に更新するという処理を行うことができます。

User.find(1)
  User Load (23.0ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
=> #<User:0x0000000120064318 id: 1, name: "加藤", age: 17, gender: "man", created_at: Mon, 29 Nov 2021 17:55:12.691067000 UTC +00:00, updated_at: Mon, 29 Nov 2021 18:55:02.288567000 UTC +00:00>

User.find(1).update(name: '佐藤')
=> [#<User:0x0000000107851260 id: 1, name: "佐藤", age: 17, gender: "man", created_at: Mon, 29 Nov 2021 17:55:12.691067000 UTC +00:00, updated_at: Mon, 29 Nov 2021 18:55:02.288567000 UTC +00:00>,

update_allメソッドとは

updateと変わらず、データを更新したい場合に使うメソッドです。

しかし、updateと違い全てのレコードの情報を一括で更新することができます

クラスメソッドなので、インスタンスではなくモデルに対して実行します。

モデル名.update(更新する情報)

*全てを変更するので、使用する場合は注意する必要があります。

参考例

User.update_all(name: '田中')
User Update All (3.5ms)  UPDATE `users` SET `users`.`name` = '田中'
=> 2

User.all
User Load (0.7ms)  SELECT `users`.* FROM `users`
=> [#<User:0x00000001167236b8 id: 1, name: "田中", age: 17, gender: "man", created_at: Mon, 29 Nov 2021 17:55:12.691067000 UTC +00:00, updated_at: Mon, 29 Nov 2021 18:55:02.288567000 UTC +00:00>,
#<User:0x00000001167235f0 id: 2, name: "田中", age: nil, gender: nil, created_at: Mon, 29 Nov 2021 17:57:16.796566000 UTC +00:00, updated_at: Mon, 29 Nov 2021 17:57:16.796566000 UTC +00:00>]

上記の例では、Userテーブルの全てのレコードのnameを’田中’に更新しています。

タイトルとURLをコピーしました