检查对象时发生错误:
#<ActiveRecord::StatementInvalid:"PG::UndefinedColumn: ERROR: column product_proposals.status_ids does not exist\nLINE 1: ...oduct_proposals\".* FROM \"product_proposals\" WHERE \"product_p...\n ^\nHINT: Perhaps you meant to reference the column \"product_proposals.status_id\".\n">'
这就是我正在使用的方法:
attribute :status_ids, :string
attribute :type_ids, :string
enum :status_ids, [
pending: 0,
verified: 1,
work_in_progress: 2,
complete: 3
]
enum :type_ids, {
price_variance: 0,
oos_in_store: 1,
not_in_store_file: 2,
not_in_master_db: 3,
data_not_correct: 4
}
我已经明确定义了属性,因为出现了此错误:
Undeclared attribute type for enum 'type_ids'. Enums must be backed by a database column or declared with an explicit type via `attribute`. (RuntimeError)
我想要永久修复此问题
要解决此异常,请注意
enum
名称必须与数据库中的属性名称匹配,并且必须是 单数。
enum :status_id, {
pending: 0,
verified: 1,
work_in_progress: 2,
complete: 3
}
enum :type_id, {
price_variance: 0,
oos_in_store: 1,
not_in_store_file: 2,
not_in_master_db: 3,
data_not_correct: 4
}
那是因为它不是一个简单的常数。声明枚举还会为该属性创建作用域方法和 bang 方法,并且可以通过(自动)复数
.statuses
和 .types
方法访问列表本身。
ActiveRecord::Enum
文档。
此外,属性名称中不需要
_id
后缀,除非这是关联或实际 ID(例如外部 ID)。
最后,不建议在枚举中使用整数值,因为它们更难以读取和维护(例如,如果您决定删除某个键,则以后不能使用其整数表示形式,或者每次都必须显式迁移数据库)。
所以最终的推荐结果是:
enum :status, {
pending: 'pending',
verified: 'verified',
work_in_progress: 'work_in_progress',
complete: 'complete'
}
enum :type, {
price_variance: 'price_variance',
oos_in_store: 'oos_in_store',
not_in_store_file: 'not_in_store_file',
not_in_master_db: 'not_in_master_db',
data_not_correct: 'data_not_correct'
}