私のモデルのJSON
表現にはCar
、高価なメソッドの出力が含まれています。
#car.rb
def as_json(options={})
super(options.merge(methods: [:some_expensive_method]))
end
私は標準的なインデックスアクションを持っています:
#cars_controller.rb
respond_to :json
def index
respond_with(Car.all)
end
JSON
次のように、他の場所でも車の表現を使用します。
#user_feed.rb
def feed_contents
Horse.all + Car.all
end
#user_feeds_controller.rb
respond_to :json
def index
respond_with(UserFeed.feed_contents)
end
aのJSON
表現はcar
複数の場所で使用さcar.cache_key
れるため、自動期限切れキャッシュ キーとして使用して、単独でキャッシュする必要があります。
これは私が現在やっている方法です:
#car.rb
def as_json(options={})
Rails.cache.fetch("#{cache_key}/as_json") do
super(options.merge(methods: [:some_expensive_method]))
end
end
ただし、キャッシュ コードを内部に配置するas_json
ことは正しくありません。キャッシュはas_json
の責任の一部ではないためです。これを行う適切な方法は何ですか?Rails 3.2.15 を使用しています。