我有一个名为Order
的模型,我想向其中添加一个名为jsonb
的新status_updates
列。此列将包含以下格式的数据:
status_updates = [{ status: 'success', created_at: <timestamp> }, { status: 'processing', created_at: <timestamp> }]
我想验证每个status
元素的status_updates
属性是以下之一:success
,canceled
,processing
。另外,我想验证每个元素都有一个created_at
时间戳。
您将如何在Rails中做到这一点?是否可以对状态进行类似于enum
的操作?
答案 0 :(得分:3)
我想如果我是你,我可能会考虑创建一个OrderStatus
模型,例如:
# == Schema Information
#
# Table name: order_statuses
#
# id :bigint not null, primary key
# status :integer default(0)
# order_id :integer
# created_at :datetime not null
# updated_at :datetime not null
#
class OrderStatus < ApplicationRecord
belongs_to :order
validates :status,
presence: true,
inclusion: { in: 0..2 }
enum status: {
processing: 0,
success: 1,
cancelled: 2,
}
end
然后在Order
中,执行以下操作:
class Order < ApplicationRecord
has_many :order_statuses
end
现在,每条OrderStatus
记录都会有一个created_at
值(假设您的OrderStatus
有效并已保存)。并且,status
将被验证为enum
中的值之一。按照书面规定,status
将默认为processing
-您可能想要也可能不需要。