0

我正在构建一个调查应用程序,根据评级我需要发生某些事情。基本上,如果提交的调查总评分低于 15,我们需要通知主管。这对于邮件程序来说很容易,但我似乎无法在 after_create 方法中访问评级数据。

我的模型有 5 个字段,名为 A、B、C、D 和 E,它们是整数,它们以表格形式保存评分数据。

我已经尝试过:notation 我已经尝试过 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
4

2 回答 2

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 进行条件测试。

于 2012-02-27T15:31:23.993 回答
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
于 2012-02-27T15:32:07.023 回答