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