0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rails enumを設定したカラムの値が取得できない時に確認したい場所

Posted at

何が起きた?

例えばUserモデルにstatusというカラムがあるとする
usersテーブルの中身はこう!

id status
1 1
2 2

enumを定義したカラムの値を取得してもnilとなってしまう

例えばUserモデルにstatusというカラムがあるとする

class User < ApplicationRecord
    enum status: { economy: 1, vip: 2 }
end

rails cでstatusを表示すると以下のようになる

$ rails c
$ [1] pry(main)> User.find(1).status
$ => nil

え?
それどころかデータを見てもnilなのだ

$ rails c
$ [1] pry(main)> User.find(1)
$ => User
$    id: 1
$    status: nil

それはもうおかしいじゃん。ダメじゃんそんなの!
聞いてないって!!!

enumの定義を消すと値は取得できる。

class User < ApplicationRecord
    # enum status: { economy: 1, vip: 2 }
end

rails cでstatusを表示すると以下のようになる

$ rails c
$ [1] pry(main)> User.find(1).status
$ => "1"

んなんでだ?

想定していた動き

class User < ApplicationRecord
    enum status: { economy: 1, vip: 2 }
end

rails cでstatusを表示すると以下のようになる

$ rails c
$ [1] pry(main)> User.find(1).status
$ => "economy"

こうなると思っている。何もおかしくない。俺は間違っていない。うわああああああああああ

原因はカラムの型の定義だった

これは気付くのに時間がかかりました。
マイグレーションを使っていないのですが簡単に書くと

# 数値で定義すべきところが
integer :status

# 文字列になっていた
string :status

:neutral_face::neutral_face::neutral_face::neutral_face::neutral_face:
お...俺じゃ無いんだ...これを書いたのは...

結論

enumを使えるのは整数型のカラムだけ!
別のカラムを追加して確認してみたりすると気付けるぞー。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?