我正在建立一个调查应用程序,根据评级我需要某些事情发生。 基本上,如果提交的总评分低于15的调查,我们需要通知主管。使用邮件程序这很容易,但我似乎无法在after_create方法中访问评级数据。
我的模型有5个名为A,B,C,D和E的字段,它们是整数,它们在表格中保存评级数据。
我试过:符号我试过self.notation,我尝试过after_create(service)service.notation并且没有任何作用 - 电子邮件永远不会被发送,因为它没有意识到评级低于15。 / p>
我也有一个类似问题的复选框。在数据库中它显示为“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
答案 0 :(得分: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 :(得分:1)
进行调试:
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