Railsでデータが登録されない。


背景

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: '[email protected]'
    )

サービスを実行すると、データが保存されていません。調査すると…

  User Exists (32.4ms)  SELECT  1 AS one FROM `users` WHERE `users`.`email` = BINARY '[email protected]' 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: '[email protected]'
    )

すると。

パスワードの文字数規約に反していたようですね。分かりやすくなりました。
save → save!メソッドに置き換えてもokですね。デプロイはダメなパターンですが…。
以上です。