Rails4.2でActiveRecord Enumとか出ましたが、状態遷移を気持よくやろうとするとやっぱりなんかgemが欲しい。
state_machine 生きてない..?
あんまりメンテされてないみたいです。
pluginaweek/state_machine
https://github.com/pluginaweek/state_machine
Rails4.1ぐらいまではパッチ当ててなんとか使っていたけどそろそろ無理。
aasm いい感じよ!
機能的に100%互換ではないけど、大体syntaxが似ているし、state_machineでうまく扱えなかった継承関係もうまくやれる!
aasm/aasm
https://github.com/aasm/aasm
移行時に注意したこと
使い方は README.md 読んでね。
bangをつけないと保存されない
state_machine.rb
job.run #=> ダメなときはfalse
job.run! #=> ダメなときはエラーが出る
でも保存されたんだけど、aasmはされない。値が変わるだけ。
なので、ひとつひとつbangつけた。
:from => :to
なsyntaxが使えないので書き換え
state_machine.rb
transition :hoge => :hogehoge
な記法は気持ちよかったけどない。
aasm.rb
transitions from: :hoge, to: :hogehoge
may_[state_name]?
な書き方できるのいいね
state_machineではcan_[state_name]?
だったかな?
with_state
ではなくscopeへ
state_machine.rb
class Job
state_machine do
state :hoge
end
end
Job.with_state(:job)
aasm.rb
class Job
aasm do
state :hoge
end
end
Job.hoge
ActiveRecord Enumみたいな感じでscope定義してくれる。
無効にも出来るけど、直感的なのであったほうがいいかな。
その他
- ## 地味に
transition
ではなくtransitions
-
any
はないがそもそも省略できる
Qiita久しぶりすぎてやばい!