読者です 読者をやめる 読者になる 読者になる

IT分からんわ~_~;

IT色々お勉強中のブログ

gem AASMを使う

  • gem AASMとは

  • rubyに有限オートマトンを追加する為のもの(ステータス管理を簡単にするもの)

  • class or moduleに定義する↓

#AASMをinclude
    include AASM
#columnで対象のカラム、enum使う場合はenum:true
    aasm column: :hoge, enum: false do
# 使うステータスをstate で書く after_enterはそのステータスの時に実行する処理
      state :runnning, initial: true, after_enter: :after_poge
      state :stopping
      state :hogeing

# event イベントを定義 イベント名suggest!でステータスをfromからtoに変更出来る afterでステータス変更後の処理を定義出来る
      event :suggest, after: :stared_poge do
        transitions from: :entry, to: :suggestion
        transitions from: :hoge_entry, to: :hoge_suggestion
      end

# 上で設定したコールバック
  def stared_poge
    p 'aho'
  end

その他、

  1. 定義してないステータスに変えようとするとAASM::InvalidTransitionエラーになる。設定でtrue,falseを返すようにもできる

  2. @hoge.aasm.states(permitted: true).map(&:name) で@hogeで変更できるステータスを出せるよ

GitHub - aasm/aasm: AASM - State machines for Ruby classes (plain Ruby, ActiveRecord, Mongoid, MongoMapper)