Rails で enum を使ってみる

はじめに

ここでは以下の記事を参考にして Railsenum を使ってみることにする。

 

使ってみる

ざっくりとプロジェクトを作成する。

 

Article モデルでは status を enum で管理するように、属性を追加する。ここでは status を integer で管理することにする。

  • bin/rails g migration AddStatusToArticle status:integer

 

作成されたマイグレーションファイルに制約を追加しておく。

f:id:matt-note:20190320165255p:plain

 

追加した属性をデータベースに反映する。

 

app/models/article.rb で status について enum で設定する。

f:id:matt-note:20190320171311p:plain

 

rails c でコンソールを起動する。Article クラスのインスタンスを作成すると、status は "draft" と文字列で管理されている(DB では integer で管理されている)。

f:id:matt-note:20190320171116p:plain

 

enum の元の値を出力してみる。【参考:Rails5でenum定義したカラムの元の値を取得 - Qiita

f:id:matt-note:20190320172613p:plain

-> :draft とシンボルで管理されているとのこと(Rails5.2)。


enum では「キー名」でメソッドが提供されている。「キー名 + ?」で設定を判別できる。「キー名 + !」で設定を変更できる。

f:id:matt-note:20190320172909p:plain

 

status の値を表示してみる。

コントローラの Strong Parameters に status を追加する。

f:id:matt-note:20190320174510p:plain

 

_form.html.erb に select タグを追加する。【参考:Railsでenumを使ったselectタグ | 酒と涙とRubyとRailsと

f:id:matt-note:20190320174650p:plain

f:id:matt-note:20190320180120p:plain

f:id:matt-note:20190320174823p:plain

 

index.html.erb で表示してみる。

f:id:matt-note:20190320174848p:plain

f:id:matt-note:20190320174946p:plain

-> フォームから値を投稿して、表示することができる。