rails: доступ к переменным-членам в after_create - PullRequest
0 голосов
/ 27 февраля 2012

Я создаю приложение для опросов, в котором, исходя из рейтингов, мне нужны определенные вещи.В основном, если опрос представлен с общим рейтингом менее 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 ]

1 голос
/ 27 февраля 2012

Do debug:

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
1 голос
/ 27 февраля 2012

Разобрался с решением.

В 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 для тестирования условий.

...