これを行うには、いくつかの簡単な方法があります。ステータスの名前が短い場合は、基本的に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