2012-02-27 2 views
0

Я создаю приложение для опроса, где, основываясь на рейтингах, мне нужно, чтобы некоторые вещи случались. В принципе, если опрос представлен с общим рейтингом менее 15, нам необходимо уведомить диспетчера. Это достаточно легко для почтовых программ, но я не могу получить доступ к данным рейтинга в методе after_create.рельсы: доступ к переменным-членам в after_create

Моя модель имеет 5 полей с именами A, B, C, D и E, которые являются целыми числами, и они содержат данные рейтинга в форме.

Я пробовал: нотация Я пробовал самостоятельно. Я пробовал after_create (service) service.notation и ничего не работает - письмо никогда не отправляется, потому что оно не понимает, что рейтинг ниже 15.

У меня также есть флажок с аналогичными проблемами. В базе данных она выглядит как «истина», но до ее сохранения она обычно отображается как 1, поэтому проверка правильности значения является сложной. Как и в приведенном ниже коде, я также не могу получить доступ к его значению. Я перечислил все различные методы, которые я пробовал без успеха.

Очевидно, это не все существующие в модели, в то же время, они перечислены ниже в качестве примеров того, что я пытался

Как получить доступ к этим значения данных в after_create вызов ?!

class Service < ActiveRecord::Base 
    after_create :lowScore 

    def lowScore 
    if(A+B+C+D+E) < 15 #does not work 
     ServiceMailer.toSupervisor(self).deliver 
    end 
    end 

    def lowScore 
    if(self.A+self.B+self.C+self.D+self.E) < 15 #does not work either 
     ServiceMailer.toSupervisor(self).deliver 
    end 
    end 

    #this does not work either! 
    def after_create(service) 
    if service.contactMe == :true || service.contactMe == 1 
     ServiceMailer.contactAlert(service).deliver 
    end 
    if (service.A + service.B + service.C + service.D + service.E) < 15 
     ServiceMailer.toSupervisor(service).deliver 
     ServiceMailer.adminAlert(service).deliver 
    end 
    end 
+1

Когда вы говорите, что не работает, что происходит? если вы придерживаетесь точки останова в методе lowScore, каковы атрибуты вашего объекта? –

+0

Я понял это, и я чувствую себя идиотом. Я отправлю свое решение. – Oranges13

ответ

1

Выбрано решение.

В model.rb:

after_create :contactAlert, :if => Proc.new {self.contactMe?} 
    after_create :lowScore, :if => Proc.new {[self.A, self.B, self.C, self.D, self.E].sum < 15} 

    def contactAlert 
    ServiceMailer.contactAlert(self).deliver 
    end 

    def lowScore 
    ServiceMailer.adminAlert(self).deliver 
    ServiceMailer.toSupervisor(self).deliver 
    end 

Ключ использовал Proc.new сделать тесты для условий.

1

Do отлаживать:

class Service < ActiveRecord::Base 
    after_create :low_score 
    def low_score 
    # raise (A+B+C+D+E).inspect # uncomment this line to debug your code 
    # it will raise exception with string containing (A+B+C+D+E). See what is result this line in your console tab where rails server started 
    # Or you can see result in your browser for this raise 
    ServiceMailer.toSupervisor(self).deliver if (A+B+C+D+E) < 15 
    end 
end 
Смежные вопросы