【发布时间】:2014-01-17 08:59:31
【问题描述】:
如何处理 Rails 中的枚举?我用谷歌搜索了这个,但没有找到任何干净的解决方案。到目前为止,我已经提出了以下对使用interaction_type_id 模型的关注。这是我在数据库中的枚举表的外键。使用这种方法,我不必在我的代码中使用 id,但是当保存与 interact_type 相关的对象时,我可以说
myobject.interaction_type = :file_download
这可以使用正确的 id 持久化数据库,因为关注点(请参阅下面的关注点 - 包含在使用枚举的模型中)将返回正确的 id。
module InteractionTypeEnum
extend ActiveSupport::Concern
included do
INTERACTION_TYPE = { file_download: 1, email: 2, telesales: 3, registration: 4, enrolment: 5 }
end
def interaction_type
INTERACTION_TYPE.key(read_attribute(:interaction_type_id)).to_s.gsub('_',' ').capitalize
end
def interaction_type=(s)
write_attribute(:interaction_type_id, INTERACTION_TYPE[s])
end
end
这只是感觉很重。必须有一种更简单/更清洁的方式。现在,当尝试为此编写测试时,它变得更加混乱。
在代码和数据库中需要我的枚举的大多数原因是性能(代码)和报告(数据库)。
任何帮助表示赞赏。谢谢。
【问题讨论】:
标签: ruby-on-rails enums ruby-on-rails-4