1

サンプルクラスを取得しました:

class Human < ActiveRecord::Base
  has_and_belongs_to_many :diseases
  before_save :check_health

  def check_health
    if(diseases.count == 0)
      self.healthy = true
    end
  end
end

保存する前にオブジェクトのフィールドを変更したい。

問題:

  • self.diseases関連の古い値を返しますdiseases

  • の新しい値に:diseasesは 経由でアクセスできますが、 のassociation_cache[:diseases]使い方がわかりませんassociation_cache。どのオブジェクトが削除対象で、どのオブジェクトが新規で、どれが更新されたかわかりません。

4

2 に答える 2

0

#check_health最初は、ロジックが完全に正しいと思います。変更する必要はありません。

問題に遭遇した理由は、人間と病気の両方の永続化されていないオブジェクトで使用した可能性があります。

before_saveそれを解決するには、コールバックをコールバックに変更するのが正しいアプローチだと思いafter_saveます。これはより理にかなっています。また、保存後に後で使用するためにこのメソッドのみが必要なように見えるので、そうしないのはなぜですか?

于 2013-07-31T18:05:12.347 に答える