1. Это зависит от того, насколько вы хотите оптимизировать запросы к БД.
2.Не действительно, он не поддерживается «из коробки» AR. # По состоянию на Rails 4 перечисления поддерживаются из коробки .
3.ИМХО, вы можете использовать строки без большого снижения производительности (просто не забудьте добавить поле в индекс). Я бы сделал это, потому что легче интернационализировать и поддерживать. Однако вы можете использовать целые числа, если вам нужна дополнительная производительность.
Вы можете взглянуть на 2 SO потока здесь и здесь , где это обсуждается.
4.Если вы хотите сохранить их как целые, вот как вы можете это сделать:
class Task << AR::Base
NORMAL = 1
ACTIVE = 2
COMPLETED = 3
STATUSES = {
NORMAL => 'normal',
ACTIVE => 'active',
COMPLETED => 'completed'
}
validates_inclusion_of :status, :in => STATUSES.keys,
:message => "{{value}} must be in #{STATUSES.values.join ','}"
# just a helper method for the view
def status_name
STATUSES[status]
end
end
и в поле зрения:
<td><%= task.status_name %></td>
Если вы хотите использовать строки, это более упрощенно:
STATUSES = ['normal', 'active', 'completed']
validates_inclusion_of :status, :in => STATUSES,
:message => "{{value}} must be in #{STATUSES.join ','}"