【问题标题】:Adding enum on model shows error on initializing different class object在模型上添加枚举显示初始化不同类对象时出错
【发布时间】:2018-04-29 18:06:42
【问题描述】:

我在 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 模型上使用枚举,也不需要枚举。这里有什么我错过的吗?

房车模型如下:

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

【问题讨论】:

  • 能否将错误文本添加为​​文本?图片可能难以阅读
  • @SimpleLime 错误文本如下所示: NoMethodError: undefined method `statuses' for #<0x0000000d0e9bf8>

标签: ruby-on-rails ruby activerecord ruby-on-rails-5 rails-activerecord


【解决方案1】:

Ruby 没有内置的枚举类型

创建一个常量:

STATUSES = { available: 0, not_available: 1 }

访问:

RvDate::STATUSES[:available]

RvDate::STATUSES[:not_available]

【讨论】:

  • 枚举适用于 RvDate。但是,它不允许创建新的房车。
  • 你能发布 schema.rb 吗?
  • 您的迁移情况如何?可以分享一下吗?
【解决方案2】:

尝试使用数组而不是哈希,枚举将自动分配值,并且应该允许您使用辅助方法:

enum status: [
  :available,
  :not_available
]

这应该允许您像这样使用辅助方法:

RvDate.statuses => { available: 0, not_available: 1 }
some_rv = RvDate.new
some_rv.status = :available
some_rv.available? => true

【讨论】:

    【解决方案3】:

    感谢大家的帮助。实际问题出在迁移文件上。 Rvs 表有一个名为 status 的字段被设置为 integer 而不是 string。因此,这导致了错误无法找到 Rv 类对象的状态。非常感谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多