我基本上想要将其移到车辆模型中。
vehicle = @vehicle_cache.get(event[:mac_address])
unless vehicle
begin
vehicle = Vehicle.where('ID = ?',event[:mac_address]).first
rescue
vehicle = nil
end
@vehicle_cache.add(event[:mac_address],vehicle)
end
我认为这是一种覆盖内部查找方法的方法吗?但我不确定如何从内部访问模型。
答案 0 :(得分:1)
class Vehicle
class << self
def find_cached event_mac_address
@vehicle_cache.get(event_mac_address) || \
where('ID = ?', event_mac_address).first.tap do |vehicle|
@vehicle_cache.add(event_mac_address, vehicle) if vehicle
end
end
end
end
以上内容将在find_cached
课程中定义Vehicle
。除非这是不可避免的,否则不应干涉导轨内部,例如find
。
我们首先尝试获取缓存值,然后使用where
(注意,rescue
不需要where
,因为find
返回空数组,与{{1}}不同)最后我们将新找到的项添加到缓存中。
答案 1 :(得分:1)
在模型中使用rails缓存
def cached_mac_address_fetch(mac_address)
Rails.cache.fetch([self, 'mac_address'], expires_in: 12.hours) do
Vehicle.where('ID = ?', mac_address).first_or_create
end
end