ActiveRecordのEnum型のデータをJavaScriptから保存する
enum(列挙型)の使い方
ActiveRecordのenumを使うと、プログラムからは文字列(名前)でアクセスでき、 DBには数値で保存される属性を作ることができます。
Modelに属性にセットできる文字列を列挙する
class Post < ActiveRecord::Base enum status: { draft: 0, published: 1 deleted: 2 } end
DBにカラムを追加する
class AddStatusToPostss < ActiveRecord::Migration def change add_column :postss, :status, :integer, default: 0 add_index :posts, :status end end
追加されるメソッド
モデル名.属性名
で現在の値を文字列で取得モデル名.文字列?
で状態チェックモデル名.文字列!
で状態変更モデル名.属性の複数形
で列挙した値を全てハッシュで取得モデル名.文字列
でその状態のレコードを検索
post = Post.new(status: :draft) post.status # => draft post.draft? # => true post.published! # statusをpublishedに変更 Post.statuses # => { draft: 0, published: 1 } # Post.statuses[:draft]のようにして数値を得られる Post.draft
JSから保存する
JSからAjaxでRails側に保存する時は文字列で送れば良い。
data: { status: 'draft' }
文字列にしておけばEnum型が自動で数値に変換してDBに保存してくれる。 JS側で数値を管理する必要がないので便利。