La gema AASM sirve para agregar una máquina de estados a clases de Ruby.
Los vamos a utilizar en un modelo.
Nuestro modelo tiene una columna llamada state de tipo string
Añadimos la gema de AASM en el GemFile
gem install aasm
Instalamos
bundle install
Añadimos en nuestro modelo Article el modulo de AASM que ofrece la gema y nuestra maquina de estados
class Article < ApplicationRecord include AASM . . aasm column: "state" do state :in_draft, initial: true state :published event :publish do transitions from: :in_draft, to: :published end event :unpublish do transitions from: :published, to: :in_draft end end . .
En este ejemplo tenemos 2 estados declarados, in_draft (borrador) y published (publicado).
El estado inicial en el que inicia nuestra columna es el de in_draft (todos los artículos que creemos se crearan como draft por defecto)
Las transiciones entre estados con AASM se hacen mediante eventos, en este caso publish y unpublish
- El evento publish pasa del estado in_draft al estado published.
- El evento unpublish pasa del estado published al estado in_draft.
Ahora desde consola hacemos las pruebas con metodos que nos proporciona la gema AASM:
article_example = Article.last #<Article id: 1,...state: "in_draft"> article_example.publish! #<Article id: 1,...state: "published"> article_example.may_publish? #False, porque para ir al estado published debo estar en el estado in_draft article_example.may_unpublish? #True article_example.published? # True article_example.unpublish! #<Article id: 1,...state: "in_draft">