我在RvDate模型上添加了枚举:
class RvDate < ApplicationRecord
enum status: { Available: 0, Not_Available: 1 }
# Associations
belongs_to :rv
# Validations
validates_presence_of :start_date
end
但是当我在rails控制台上运行Rv.create
时,它会显示以下错误:
我没有在Rv模型上使用枚举,我不需要。我在这里错过了什么吗?
Rv模型如下所示:
class Rv < ApplicationRecord
has_many :rv_dates, dependent: :destroy
end
rv_dates的架构
create_table "rv_dates", force: :cascade do |t|
t.integer "rv_id"
t.date "start_date"
t.date "end_date"
t.boolean "availability"
t.float "price"
t.text "notes"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "status"
t.index ["rv_id"], name: "index_rv_dates_on_rv_id", using: :btree
end
答案 0 :(得分:0)
Ruby没有内置的枚举类型
创建一个常量:
STATUSES = { available: 0, not_available: 1 }
访问:
RvDate::STATUSES[:available]
RvDate::STATUSES[:not_available]
答案 1 :(得分:0)
尝试使用数组而不是散列,枚举将自动分配值,并允许您使用辅助方法:
enum status: [
:available,
:not_available
]
这应该允许你使用如下的辅助方法:
RvDate.statuses => { available: 0, not_available: 1 }
some_rv = RvDate.new
some_rv.status = :available
some_rv.available? => true
答案 2 :(得分:0)
感谢大家的帮助。实际问题在于迁移文件。 Rvs 表格中有一个名为状态的字段,该字段设置为整数,而不是字符串。因此,这导致错误无法找到Rv类对象的状态。非常感谢大家的帮助。