我想在现有日期使用enum
。
表中的列status
包含成千上万的记录。
问题是我的数据库中的记录大写,例如有效,待审核,正在等待审核,已关闭等等
现在我定义一个枚举
enum status: [:active,:closed,:pending,:awaiting_review]
由于大写字母原因,它为何不起作用,而是下划线而不是空格。
当我执行Model.first.status
时,它返回nil
您的问题是,您正在尝试执行Model.status
,它不会返回任何内容,因为如果您想查看所有状态,status
是实例方法,而不是类方法,做这个
Model.statuses
如果您想获取Model对象的状态,它将返回一个散列,这是一个示例
Model.first.status
默认情况下,enum需要一个整数列,因此,如果您这样定义枚举
enum status: [:active,:closed,:pending,:awaiting_review]
然后,表中的值将分别为0,1,2,3
。
因此,您可能希望将status
列迁移到integer
,然后编写rake任务以根据枚举值将现有值更新为新值!
在您的情况下,您说awaiting_review
返回nil,因为您的现有值为awaiting review
,即没有下划线。为了快速修复,请在模型中定义此方法
def status
if self.read_attribute_before_type_cast(:status) == 'Awaiting Review'
'Awaiting Review'
else
super
end
end
要在每种情况下都使用上述方法,请改为这样定义枚举
enum status: { active: 'active',closed: 'closed',pending: 'pending',awaiting_review: 'Awaiting Review' }
根据表中保存的内容更改字符串哈希值
希望有帮助