如何在无表格的Rails 4模型中添加枚举支持

时间:2015-03-10 13:15:36

标签: ruby-on-rails ruby-on-rails-4

我正在尝试创建一个没有数据库表支持的模型。实质上,该模型表示由数据库支持的特定类型的模型实例。 db支持的模型称为Schedule,非支持的模型称为Reservation。

Schedule模型如下所示:

class Schedule < ActiveRecord::Base
  validates :scheduled_date, :presence => true
  ...
  def self.TIME_PERIODS
    @@TIME_PERIODS ||= { time_period_custom: 1, time_period_am: 2, time_period_pm: 3, time_period_all_day: 4 }
  end
  enum time_period: Schedule.TIME_PERIODS
  enum entry_type: { entry_type_reservation: 1, entry_type_blackout: 2 }
  ...
end

预订模型如下所示:

class Reservation
  include ActiveModel::Validations
  include ActiveModel::Conversion
  include ActiveModel::Model
  include ActiveRecord::Enum
  extend ActiveModel::Naming

  attr_reader :id, :entry_type
  attr_accessor: :schedule_date, :time_period
  validates :scheduled_date, :presence => true
  ...
  enum time_period: Schedule.TIME_PERIODS
  ...
end

这会产生运行时错误: NoMethodError:预留的未定义方法`enum':Class

有没有办法在不是从ActiveRecord派生的模型中添加对枚举的支持?

1 个答案:

答案 0 :(得分:0)

您需要extend,而不是include ActiveRecord::Enum,因为enum是一种类方法。但即便如此,它也不会起作用,因为它依赖ActiveRecord的其他东西。我无法让enums在非AR模型中工作。 :(