Como organizar retornos de chamada complexos no Rails?
Eu tenho um aplicativo Rails, que usa muito callbacks .. de modo que eu tenho algumas funções sendo chamadas: after_create e: after_commit em vários modelos.
Eu me pergunto se o jeito que estou fazendo agora é o melhor.
Basicamente eu tenho o seguinte cenário:
Class Parent < ActiveRecord::Base
has_many :children
after_create :first_function
after_commit :last_function
def first_function
if !self.processed?
self.children.create(:name => "Richard The Lion Heart")
self.processed = true
self.save!
end
end
def last_function
if self.processed?
if !self.processing?
self.process
self.save!
self.processing = true
self.save!
end
end
end
end
Assim, você pode ver que a coisa toda depende de algumas verificações booleanas duplas estranhas, porque senão a segunda_função é chamada toda vez que o modelo é atualizado e pode ser atualizado pela própria função e assim a função é chamada repetidamente.
No geral, isso me leva ao caso em que tenho que introduzir uma nova verificação booleana para cada retorno de chamada ser disparado. Funciona, mas não vejo isso como elegante. o que estou perdendo?