rails: доступ к переменным-членам в after_create
Я создаю приложение для опросов, где, основываясь на рейтингах, мне нужны определенные вещи. В основном, если опрос представлен с общим рейтингом менее 15, мы должны уведомить руководителя. С почтовыми программами это достаточно просто, но я не могу получить доступ к данным рейтинга в методе after_create.
Моя модель имеет 5 полей с именами A,B,C,D и E, которые являются целыми числами, и они содержат данные рейтинга в форме.
Я пробовал: нотация Я пробовал self.notation, я пробовал after_create(service) service.notation и ничего не работает - электронное письмо никогда не отправляется, потому что оно не осознает, что рейтинг ниже 15.
У меня также есть флажок с похожими проблемами. В базе данных он отображается как "true", но перед сохранением он обычно отображается как 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
2 ответа
Разобрался с решением.
В 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 для тестирования условий.
Сделать отладку:
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