LoginSignup
1
0

More than 3 years have passed since last update.

【Rails】Useridがnilになったとき

Posted at

環境

Rails 6.1.3.1
Ruby 3.0.0
MySQL 8.0.23

エラー内容

Rails consoleで新しいユーザーを作成したときのこと、

irb(main):001:0> User.create(name: "hogege",email: "hoge@hoge",password: "password",password_confirmation: "password")
  TRANSACTION (0.2ms)  BEGIN
  User Exists? (0.7ms)  SELECT 1 AS one FROM `users` WHERE `users`.`email` = 'hoge@hoge' LIMIT 1
  TRANSACTION (0.2ms)  ROLLBACK
=> #<User id: nil, name: "hogege", email: "hoge@hoge", created_at: nil, updated_at: nil, password_digest: [FILTERED]>

Userid, created_at, update_atがnilになってしまいました

+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | bigint       | NO   | PRI | NULL    | auto_increment |
| name            | varchar(255) | YES  |     | NULL    |                |
| email           | varchar(255) | YES  | UNI | NULL    |                |
| created_at      | datetime(6)  | NO   |     | NULL    |                |
| updated_at      | datetime(6)  | NO   |     | NULL    |                |
| password_digest | varchar(255) | YES  |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+

確認してみても、idはauto_increaseになっているので、create!を使ってみる

irb(main):002:0> User.create!(name: "hogege",email: "hoge@hoge",password: "password",password_confirmation: "password")
  TRANSACTION (6.7ms)  BEGIN
  User Exists? (4.3ms)  SELECT 1 AS one FROM `users` WHERE `users`.`email` = 'hoge2@hoge' LIMIT 1
  TRANSACTION (1.9ms)  ROLLBACK
Traceback (most recent call last):
        1: from (irb):7:in `<main>'
ActiveRecord::RecordInvalid (Validation failed: Email is invalid)

なんてことはない話でした。emailの形式が間違っていました、、、

irb(main):008:0> User.create(name: "hogege2",email: "hoge2@hoge.com",password: "password",password_confirmation: "password")
  TRANSACTION (0.2ms)  BEGIN
  User Exists? (1.5ms)  SELECT 1 AS one FROM `users` WHERE `users`.`email` = 'hoge2@hoge.com' LIMIT 1
  User Create (1.5ms)  INSERT INTO `users` (`name`, `email`, `created_at`, `updated_at`, `password_digest`) VALUES ('hogege2', 'hoge2@hoge.com', '2021-04-11 00:45:14.108385', '2021-04-11 00:45:14.108385', '$2a$12$g5Ks0L4Eiw.QotTeTzt2ieBsTNKBbrpJiNtb6C/JxERBqmus7UD7q')
  TRANSACTION (1.9ms)  COMMIT
=> #<User id: 1, name: "hogege2", email: "hoge2@hoge.com", created_at: "2021-04-11 00:45:14.108385000 +0000", updated_at: "2021-04-11 00:45:14.108385000 +0000", password_digest: [FILTERED]>

無事成功!

まとめ

create 失敗しているときは何も教えてくれず終わり
create! エラー内容を教えてくれる

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0