RubyOnRails

Ruby on Rails データ更新

環境

  • CentOS6.5
  • Rails 5.1.4
  • MySQL 5.7
  • Ruby 2.3.1

RailsでMySQLのテーブル作成で作成したテーブルを使います。

テーブル名:

  • users

カラム:

  • id (BIGINT(20)) <= PK
  • uuid (varchar(255))
  • name (varchar(255))
  • age (int(11))
  • created_at (datetime)
  • updated_at (datetime)

基本

ID3のユーザのageを50に更新します。

user = User.find(3)
user.age = 50
user.save

↓ が実行される

SELECT  `users`.* FROM `users` WHERE `users`.`id` = 3 LIMIT 1
UPDATE `users` SET `age` = 50, `updated_at` = '2017-10-09 05:49:44' WHERE `users`.`id` = 3

複数レコードの場合はどうなるか??

全てのレコード更新

usersテーブルの全てのレコードのageを1000にします

User.update_all ['age = ?', 1000]

これが実行される

UPDATE `users` SET age = 1000

条件に当てはまる複数レコードを更新

例:age = 2のデータのnameをZZZにしたい

イメージ:

UPDATE users SET name = 'ZZZ' WHERE age = 2

をRailsで実行できるようにしたい。

users = User.where('age = ?', 2).update_all(:name => 'ZZZ')

イメージ通り、↓が実行された!

UPDATE `users` SET `users`.`name` = 'ZZZ' WHERE (age = 2)