一部の db フィールドの値が取得された直後に非 db フィールドを設定できるアクティブなレコード コールバックはありますか? 非 db フィールドの値を計算する必要があるため、データベースの取得後にそれを行う必要があります。
これを行う他の方法も歓迎します。具体的には、データベース以外の days_ago フィールドがあり、created_at が使用可能になった後にのみ作成したいので、モデル クラス内でこれを行う必要があります。
一部の db フィールドの値が取得された直後に非 db フィールドを設定できるアクティブなレコード コールバックはありますか? 非 db フィールドの値を計算する必要があるため、データベースの取得後にそれを行う必要があります。
これを行う他の方法も歓迎します。具体的には、データベース以外の days_ago フィールドがあり、created_at が使用可能になった後にのみ作成したいので、モデル クラス内でこれを行う必要があります。
使用する必要があります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
「遅延ロード」days_ago
フィールドが必要なようです。days_ago
モデルに次のようなメソッドを追加して、実際に必要な場合にのみ値を計算する必要があります。
def days_ago
return nil unless created_at?
@days_ago ||= ... # (calculation involving created_at)
end
を初めて呼び出すとdays_ago
、値が計算され、値が@days_ago
変数にキャッシュされます。2 回目に呼び出すと、キャッシュされた値が返されます。