背景
ActiveRecordを使用してデータを保存するとき、データが保存されていない時があります。
バリデーションですべることが多いので、整理しておきます。
環境
項目 | 内容 |
---|---|
OS.Catalina | v10.15.4 |
Ruby | v2.5.1 |
Ruby On Rails | v5.2.4.3 |
内容
あまり機会はないですが、例えば初期ユーザを作成するようなサービスがあった時。
app/lib/make_default_data_service.rb
1 default_user = User.new
2 default_user.update_attributes(
3 id: 1,
4 password: 1111,
5 name: '未登録ユーザ',
6 email: 'example@test.com'
)
サービスを実行すると、データが保存されていません。調査すると…
User Exists (32.4ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = BINARY 'example@test.com' LIMIT 1
↳ app/lib/make_default_data_service.rb:15
(0.5ms) ROLLBACK
「ユーザデータがすでに存在する?」とはき違えて、DBまで調査していました。
上記のソースの2行目を改修しました。
(※改修後)app/lib/make_default_data_service.rb
1 default_user = User.new
2 default_user.update_attributes!(
3 id: 1,
4 password: 1111,
5 name: '未登録ユーザ',
6 email: 'example@test.com'
)
パスワードの文字数規約に反していたようですね。分かりやすくなりました。
save → save!メソッドに置き換えてもokですね。デプロイはダメなパターンですが…。
以上です。