Closed3
railsのenum型で沼

前提
modelで次のような記述をしている
models/task.rb
class Task < ApplicationRecord
validates :task_name, presence: true, length: { maximum: 190 }
validates :detail, length: { maximum: 190 }
validates :priority, presence: true, numericality: { only_integer: true }
validates :status, presence: true, numericality: { only_integer: true }
----
enum priority: {
'低': 0,
'標準': 1,
'高': 2
}
enum status: {
'未着手': 0,
'着手中': 1,
'完了': 2
}
schema.rb
create_table "tasks", charset: "utf8mb4", force: :cascade do |t|
t.string "task_name", null: false
t.datetime "date_limit"
t.integer "priority", default: 1
t.integer "status", default: 0
--
end
問題
-
Task.new
してみると
irb(main):001:0> Task.new
=> #<Task:0x0000ffffb5d596d8 id: nil, ...,
priority: "標準", status: "未着手", ...>

- 同じことが
#create
から task.saveした場合でも発生し、値がkey名になり正しくsaveできない
一旦の対応
- enum型を諦めた
- →先輩から「enum型を使うのはよくあることだし、key名で保存されてしまうことを修正するべきでは?」という至極真っ当なことを言われてしまった……すいませんめんどくなって辞めちゃいました……
調査
- Rails5でenum定義したカラムの元の値を取得 - Qiita の通りにするとvalueは取得できる。が、saveの直前に噛ませないと変換されてしまう。
- 自分の知識と調査範囲だともうわからないので一回寝かせて先輩に聞きます…

自分の勘違い
このスクラップは2022/08/17にクローズされました
ログインするとコメントできます