顧客管理でusersテーブルに男性、女性などを判断するinteger型のカラムを追加することありますよね?それをviewで簡単に男性、女性と表示させるときはenumを使うと簡単に実装できます。
たとえばusersテーブルにsexカラムが存在して、integer型で格納するとします。0だったら女性、1だったら男性としてデータベースに登録し、判断します。
create_table "customer_users", force: :cascade do |t| t.string "name", null: false t.string "email", null: false t.text "profile" t.integer "sex", null: false end
integer型なので、もちろん数字でデータベースには格納されます。
でも、viewで「男性」、「女性」と表示したい時があります。
そんなときはmodelファイルでenumを使うと便利です。
app/models/user.rb
class User < ActiveRecord::Base enum sex: [:female, :male] end
modelでenumを定義すると、viewで男性、女性と表示することが容易になります。
app/views/users/show.html.erb
sexに男性を表す1が格納されていると... @user.sex #=> 男性
注意しなければならないのは、後でenumに属性を追加したときです。たとえば、オカマを追加してみましょう。
app/models/user.rb
class User < ActiveRecord::Base enum sex: [:okama, :female, :male] end
先頭に追加してしまうとテーブルに格納されている0でokamaを参照することになります。今まで0で女性を参照できていましたが、女性が全員オカマになってしまいます。
それを防ぐには後ろに追加する必要があります。
app/models/user.rb
class User < ActiveRecord::Base enum sex: [:female, :male, :okama] end
enumをI18nに対応するにはymlファイルに以下のように定義します。
ja.yml
ja: user_sex: female: 女性 male: 男性
viewでは以下のように呼び出します。
I18n.t("user_sex.#{@user.sex}")
他にも便利な使い方があるので、参考にしてみてください。
コメントを残す