Evite se repetir com state_machine

ATUALIZA√á√ÉO: @errinlarsen notou que o c√≥digo anterior parou de funcionar nas vers√Ķes recentes de state_machine / rails. Eu atualizei o post para usar Rails Concerns.

Às vezes, quando você está usando state_machine, descobre que há modelos que compartilham o mesmo fluxo de trabalho, por exemplo, quando muitos modelos precisam ser aceitos por um administrador antes de serem publicados e, para evitar a repetição do código, você pode fazer o seguinte:

Adicione uma preocupação em app / models / relevant / shared / optional.rb:

module Shared::Acceptable
extend
ActiveSupport::Concern

included
do
state_machine
:initial => :new do
event :accept do
transition
:new => :published
end

event :reject do
transition
:new => :rejected
end
end
end

end

Inclua o módulo em seus modelos:

class Comment << ActiveRecord::Base
include
Shared::Acceptable

...
end

class Image << ActiveRecord::Base
include
Shared::Acceptable

...
end

Voc√™ pode usar o Concerns para compartilhar facilmente funcionalidades, escopos, configura√ß√Ķes, validadores ou declara√ß√Ķes de relacionamento entre diferentes modelos http://api.rubyonrails.org/classes/ActiveSupport/Concern.html