我需要为对象添加状态,并且需要有关 Rails 方法的提示。我曾在某个地方看到状态已添加到模型中,但已经丢失了它所在的位置。
我所说的状态是指跟踪项目状态的东西。像 {0: :ORDERED, 1: :CHANGED, 2: :SHIPPED, 3: :ARCHIVED}
用于店内订单。看起来它需要存储在数据库中的 id,我可以在代码中使用的常量或符号而不是整数 id,以及用于 UI 的一两个人类可读消息
最佳答案
有几种简单的方法可以做到这一点。如果状态的名称很短,我基本上会按照 Samy 的建议将它们直接存储在模型中。所以,在你的迁移中,你会做
add_column :orders, :status, :string
然后,在您的模型中,您可以使用 status
方法来检索状态。您需要确保只存储有效状态,所以您的 :inclusion
验证器是这样的:
class Order
validates :status, inclusion: { in: %w(ordered changed shipped archived) },
presence: true
end
如果状态较长,您可以做一些与上面非常相似的事情,为每个状态取一个短名称,然后添加一个额外的方法来为您提供完整的状态消息
class Order
STATUSES = { 'ordered' => 'Order placed',
'changed' => 'A change has been made to the order',
'shipped' => 'The order has been shipped',
'archived' => 'The order has been archived' }
def self.valid_statuses
STATUSES.keys
end
validates :status, inclusion: { in: valid_statuses },
presence: true
def extended_status
STATUSES[status]
end
end
关于ruby - Rails 中添加状态的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10744059/