ActiveRecordの属性は"="を使わないとDBを更新できない
Ruby on Rails チュートリアル:実例を使って Rails を学ぼうをやっていて気づいたので書いた。rails 4.0.2です。
"="を使わずに更新してみる("sub!"を使ってみる→失敗)
#オブジェクトを作る > user1 = User.create(name:"aaa",email:"aaa@example.com") (0.2ms) SAVEPOINT active_record_1 SQL (0.5ms) INSERT INTO "users" ("created_at", "email", "name", "updated_at") VALUES (?, ?, ?, ?) [["created_at", Tue, 06 May 2014 08:25:28 UTC +00:00], ["email", "aaa@example.com"], ["name", "aaa"], ["updated_at", Tue, 06 May 2014 08:25:28 UTC +00:00]] (0.2ms) RELEASE SAVEPOINT active_record_1 => #<User id: 4, name: "aaa", email: "aaa@example.com", created_at: "2014-05-06 08:25:28", updated_at: "2014-05-06 08:25:28"> #email属性をsub!を使って更新 > user1.email.sub!(/a/,"b") => "baa@example.com" #保存(ログにSQLの実行履歴が表示されない) > user1.save (0.2ms) SAVEPOINT active_record_1 (0.2ms) RELEASE SAVEPOINT active_record_1 => true #DBは更新されていない > User.find(4) User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 4]] => #<User id: 4, name: "aaa", email: "aaa@example.com", created_at: "2014-05-06 08:25:28", updated_at: "2014-05-06 08:25:28">
"="をつかって更新してみる(成功)
#DBデータをリロード > user1.reload User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 4]] => #<User id: 4, name: "aaa", email: "aaa@example.com", created_at: "2014-05-06 08:25:28", updated_at: "2014-05-06 08:25:28"> #email属性を"="を使って更新 > user1.email="baa@example.com" => "baa@example.com" #保存(ログにSQLの実行履歴が表示される) > user1.save (0.2ms) SAVEPOINT active_record_1 SQL (0.6ms) UPDATE "users" SET "email" = ?, "updated_at" = ? WHERE "users"."id" = 4 [["email", "baa@example.com"], ["updated_at", Tue, 06 May 2014 09:03:11 UTC +00:00]] (0.2ms) RELEASE SAVEPOINT active_record_1 => true #DBが更新されている > User.find(4) User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 4]] => #<User id: 4, name: "aaa", email: "baa@example.com", created_at: "2014-05-06 08:25:28", updated_at: "2014-05-06 09:03:11">