我正在使用Enumerize gem,我想创建一个在两个模型之间共享的Enum。
我的Enum模型如下:
class StudyTypeEnum < ApplicationRecord
extends Enumerize
enumerize :studytype, in: {:full_time, :part_time}
end
然后我将其包含在其他模型中
class Course < ApplicationRecord
include StudyTypeEnum
...
我不确定现在如何创建迁移,是否需要在StudyTypeEnum和Course模型中都创建StudyType列?
答案 0 :(得分:0)
我希望用户关注这种行为。
文件中的:app/models/concerns/enumerable_study.rb
module EnumerableStudy
extend ActiveSupport::Concern
extends Enumerize
included do
enumerize :studytype, in: {:full_time, :part_time}
end
end
,然后如果您的任何模型需要该字段,请执行以下操作:
例如在文件app/models/course
class Course < ApplicationRecord
include EnumerableStudy
end
答案 1 :(得分:0)
在Ruby类中,其他类不能包含-只有模块可以。类只能用于“经典”垂直继承(一个类从单个基类继承)。
module StudyTypeEnum
def self.included(base)
base.extend Enumerize
base.class_eval do
enumerize :studytype, in: {:full_time, :part_time}
end
end
end
由于代码需要在包含模块的类的上下文中执行,因此我们需要定义一个self.included
方法,当我们包含该类时将调用该方法。您还可以使用ActiveSupport::Concern
来包装这个常见的Ruby习惯用法。
class Course < ApplicationRecord
include StudyTypeEnum
end
我不确定现在如何创建迁移,我是否需要创建迁移 StudyTypeEnum和Course模型中的StudyType列?
由于StudyTypeEnum是一个混入模型类的模块,因此它确实具有表。
您只需要将该列添加到实际模型(在本例中为Course),并计划将其包括StudyTypeEnum在内的任何其他模型添加。