Как организовать сложные обратные вызовы в Rails?

У меня есть приложение Rails, которое часто использует обратные вызовы... так что у меня довольно много функций, вызываемых :после _create и :после _фиксации в нескольких моделях.

Я задаюсь вопросом, является ли способ, которым я делаю это прямо сейчас, лучшим.

В основном у меня есть следующий сценарий:

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

Таким образом, вы можете видеть, что все зависит от некоторых странных двойных логических проверок, потому что в противном случае вторая функция _вызывается каждый раз, когда модель обновляется, и она может быть обновлена ​​​​самой функцией, поэтому функция вызывается повторно.

В целом это приводит меня к случаю, когда я должен ввести новую логическую проверку для каждого срабатывания обратного вызова. Это работает, но я не считаю это элегантным. Что мне не хватает?

6
задан Stpn 18 July 2012 в 00:59
поделиться