Enumerizeでenum値を扱う
Railsのモデルでenum値を扱うとき、enumerizeというgemを使うと便利です。
# Gemfile gem 'enumerize'
class Task extend Enumerize enumerize :status, in: { pending: 0, todo: 1, done: 2 } end
と書くと、
Task = Task.new(status: 'pending') #=> valid Task = Task.new(status: 'unknown') #=> not valid
のようにバリデーションがかけられたり、
Task.where(status: :pending)
のように検索を行うことが可能です。
また、以下のようにlocaleを設定することで
# ja.yml enumerize: task: status: pending: 待機中 todo: 対応する done: 対応済
Task.status.options # => [["待機中", "pending"], ["対応する", "todo"], ["対応済", "done"]]
のように値を返すようになり、enum値の入力でよく使うselectフォームで
<%= form_for @task do |f| %> <%= f.select :task, Task.status.options %> <% end %>
のように簡潔に記述できるようになります。