2

一部の db フィールドの値が取得された直後に非 db フィールドを設定できるアクティブなレコード コールバックはありますか? 非 db フィールドの値を計算する必要があるため、データベースの取得後にそれを行う必要があります。

これを行う他の方法も歓迎します。具体的には、データベース以外の days_ago フィールドがあり、created_at が使用可能になった後にのみ作成したいので、モデル クラス内でこれを行う必要があります。

4

2 に答える 2

5

使用する必要がありますafter_find

after_find :set_days_ago

def set_days_ago
  self.days_ago = DateTime.now - self.created_at.to_datetime if self.created_at
end
于 2012-10-26T20:16:26.110 に答える
2

「遅延ロード」days_agoフィールドが必要なようです。days_agoモデルに次のようなメソッドを追加して、実際に必要な場合にのみ値を計算する必要があります。

def days_ago
  return nil unless created_at?
  @days_ago ||= ... # (calculation involving created_at)
end

を初めて呼び出すとdays_ago、値が計算され、値が@days_ago変数にキャッシュされます。2 回目に呼び出すと、キャッシュされた値が返されます。

于 2012-10-26T20:10:37.423 に答える