1日1%成長するブログ

毎日成長するために仕事/プライベートで得た学びをアウトプットするブログです

ActiveRecordのEnum型のデータをJavaScriptから保存する

enum(列挙型)の使い方

ActiveRecordenumを使うと、プログラムからは文字列(名前)でアクセスでき、 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からAjaxRails側に保存する時は文字列で送れば良い。

data: {
  status: 'draft'
}

文字列にしておけばEnum型が自動で数値に変換してDBに保存してくれる。 JS側で数値を管理する必要がないので便利。