我正在尝试创建一个没有数据库表支持的模型。实质上,该模型表示由数据库支持的特定类型的模型实例。 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派生的模型中添加对枚举的支持?
答案 0 :(得分:0)
您需要extend
,而不是include
ActiveRecord::Enum
,因为enum
是一种类方法。但即便如此,它也不会起作用,因为它依赖ActiveRecord
的其他东西。我无法让enums在非AR模型中工作。 :(