事前準備
model側
1 2 3 4 5 |
class Japan extend Enumerize enumerize :sikoku, in: { tokusima: 1, kagawa: 2, ehime: 3, kouti: 4 } end |
locales側
1 2 3 4 5 6 7 8 |
ja: enumerize: japan: sikoku: tokusima: 徳島 kagawa: 香川 ehime: 愛媛 kouti: 高知 |
実装
インスタンスメソッド(Enumの個々の値を操作する)
これでnewしたとします。
1 |
japan = Japan.new(sikoku: :kouti) |
インスタンスのクラスはEnumrizeモジュールのValueクラス「Enumrize::Value」が返る
1 |
japan.sikoku.class |
https://github.com/brainspec/enumerize/blob/master/lib/enumerize/value.rb
「高知」が返る
1 |
japan.sikoku_text |
値(4)が返る
1 |
japan.sikoku.value |
クラスメソッド(Enumの全体の値を操作する)
クラスを操作するにはEnumrizeモジュールのattributeクラスになります。
1 |
Japan.sikoku.class |
https://github.com/brainspec/enumerize/blob/master/lib/enumerize/attribute.rb
文字列の配列(["tokusima","kagawa","ehime","kouti"])が返る
1 |
Japan.sikoku.values |
2次元配列([["徳島","tokusima"],["香川","kagawa"],["愛媛","ehime"],["高知","kouti"]])が返る
1 |
Japan.sikoku.options |
scope(ActiveRecord::Relationで処理)
事前準備
1 2 3 4 5 |
class Japan extend Enumerize enumerize :sikoku, in: { tokusima: 1, kagawa: 2, ehime: 3, kouti: 4 }, scope: true end |
値を取得する。
徳島に該当するレコードを全件ActiveRecord::Relationの形で取得できます。modelのscopeと同じ役割になります。
1 |
Japan.with_sikoku(:tokusima) |
その他知識
これだけでinclusionのバリデーションがかかります。
この記事へのコメントはありません。