lif*_*der 2 ruby model ruby-on-rails-3
我需要添加一个对象的状态,并需要一个关于Rails方法的提示.在某个地方,我看到状态被添加到模型中,但已经丢失了.
按状态,我的意思是跟踪项目状态.喜欢{0: :ORDERED, 1: :CHANGED, 2: :SHIPPED, 3: :ARCHIVED}
在商店订购.看起来它需要存储在DB,常量或符号中的id,我可以在代码中使用而不是整数id,以及一个或两个用于UI的人类可读消息
有几种简单的方法可以做到这一点.如果状态的名称很短,我基本上会做Samy建议并将它们直接存储在模型中.所以,在你的迁移中,你会这样做
add_column :orders, :status, :string
Run Code Online (Sandbox Code Playgroud)
然后,在模型中,您可以使用该status
方法检索状态.您需要确保只存储有效状态,因此:inclusion
验证器的内容如下:
class Order
validates :status, inclusion: { in: %w(ordered changed shipped archived) },
presence: true
end
Run Code Online (Sandbox Code Playgroud)
如果状态较长,您可以使用上面的名称为每个状态执行非常类似的操作,然后添加其他方法以提供完整的状态消息
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2453 次 |
最近记录: |