47
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Enumerizeを数値型カラムで使う

Last updated at Posted at 2014-05-17

railsのModelで列挙型を扱うのに、gemのenumerizeが便利です。
しかし、あまり使い方を扱った日本語の記事が無い……。

最近だと、去年(2013年)8月にQiitaのエントリーがありました。
Enumerize 使い方 - Qiita

が、この記事だと文字列型のカラムで使う場合しか書いてありません。
数値型カラムをフラグのように使っているレコードでこのgemを使う方法を書いておきます。

String型以外のカラムで使う

例えば以下のようなテーブルを、SQLの参考書などで見かけたことがある方も多いのではないでしょうか。

カラム名 説明
code char(8) 従業員コード
name varchar(64) 氏名(苗字+名前)
sex integer 性別。-1:不明、0:男性、1:女性、99:その他
enter_at date 入社年度

ArctiveRecordなどでレコード取得した際に、「性別が0なら男で、1なら女で…」という処理を実装する時にenumerizeが活躍します。

employee.rb
class Employee < ActiveRecord::Base
  extend Enumerize
  enumerize :sex, in: {unkown: -1, male: 0, female: 1, other: 99}, scope: :having_status
end
Employee.with_sex(:male)
#=> SELECT "employees".* FROM "employees" WHERE "users"."sex" IN (0)

person = Employee.first
person.male?    #=> false
person.female?  #=> true
person.sex_text #=> 女  // i18nの設定が必要

便利ですね!

カラムに配列を使ったり、i18nと連動したり、railsのviewにラジオボタンを作ったりなど。
他にもいろいろな使い方があります
詳しくはenumerize - GithubのREADMEを見てください。

(2014/06/22追記)

  • Rails4.1からはModelにenumという機能を使って列挙型を表せるようになりました
  • 「そもそもActiveRecordじゃなくて、普通のrubyスクリプトで列挙型使いたいんだけど……」という人はinumが便利だと思います

日本語参考サイト

47
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?