【发布时间】:2017-05-18 23:28:20
【问题描述】:
我正在使用 Rails 5。我有这个模型
class MyObject < ActiveRecord::Base
...
belongs_to :distance_unit
我注意到当我有如下一行时
distance = Distance.new({:distance => my_obj.distance, :distance_unit => my_obj.distance_unit})
它会导致执行以下操作
SELECT "distance_units".* FROM "distance_units" WHERE "distance_units"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
没什么异常,但我在我的 DistanceUnit 模型中创建了一个缓存方法
class DistanceUnit < ActiveRecord::Base
def self.cached_find_by_id(id)
Rails.cache.fetch("distanceunit-#{id}") do
puts "looking for id: #{id}"
find_by_id(id)
end
end
我希望“distance = Distance.new({:distance => my_obj.distance, :distance_unit => my_obj.distance_unit})”行调用我的缓存功能,而不是跑到数据库中。我怎样才能做到这一点?
【问题讨论】:
-
你用什么来存储缓存?
-
哦,好问题。我的配置文件中有“config.cache_store = :memory_store”。
标签: caching model ruby-on-rails-5 finder in-memory