0

私は、評価に基づいて、特定のことが起こる必要がある調査アプリを構築しています。基本的に、合計評価が15未満の調査を提出する場合は、監督者に通知する必要があります。メーラーを使えば簡単ですが、after_createメソッドで評価データにアクセスできないようです。

私のモデルには、整数であるA、B、C、D、およびEという名前の5つのフィールドがあり、それらは形式で評価データを保持します。

: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 に答える