rails 5 API低级缓存
我对Rails API缓存有点困惑。 我正在使用JSONAPI规范和fast_jsonapi gem并尝试在show动作上缓存车辆本身,如果有像para include=service_notes,service_alerts
这样的params include=service_notes,service_alerts
那么我也想缓存它们。 这是我最初的方法,但不确定它是否正确。
我有两个主要问题:
-
对于车辆缓存本身有一个比我的车辆更好的方法= Vehicle.find_cached(params [:id])。 如果车辆已更新,则不使用updated_at,而是使用after save回调来更新缓存。 我只是不知道我是否能以某种方式使用像
Rails.cache.fetch(["vehicles", vehicle], version: vehicle.updated_at)
因为它在这里建议: https : //github.com/rails/rails / pull / 29092因为这需要车辆实例。 如您所见,set_vehicle
控制器方法非常尴尬。 -
这个
Rails.cache.fetch(['vehicles', vehicle, include_params], version: vehicle.updated_at)
是否有意义? 我试图根据不同的包括参数缓存查询。 也许它有点矫枉过正,我可以只包括所有内容并将其缓存为:Rails.cache.fetch([‘vehicles’,vehicle,’with_includes’],version:vehicle.updated_at)执行Vehicle.includes(:vehicle_alerts,:service_notes,:service_intervals).find(params [:id])end
在这里处理缓存的正确方法是什么?
service_note.rb
为service_interval.rb
和vehicle_alert.rb
设置相同
class ServiceNote < ApplicationRecord belongs_to :vehicle, touch: true end
vehicle.rb
class Vehicle < ApplicationRecord after_save :update_cache has_many :vehicle_alerts, dependent: :delete_all has_many :service_notes, dependent: :delete_all has_many :service_intervals, dependent: :delete_all def update_cache Rails.cache.write(['vehicles', vehicle_id], self) end def self.find_cached(vehicle_id) Rails.cache.fetch(['vehicles', vehicle_id]) { find(vehicle_id) } end end
vehicles_controller.rb
before_action :set_vehicle, only: [:show] def show render json: VehicleSerializer.new(@vehicle, options).serialized_json end private def set_vehicle vehicle = Vehicle.find_cached(params[:id]) @vehicle = Rails.cache.fetch(['vehicles', vehicle, include_params], version: vehicle.updated_at) do Vehicle.includes(include_params).find(params[:id]) end authorize @vehicle end
vehicle_serializer.rb(带有fast_jsonapi gem)
# same for :service_notes and :vehicle_alerts has_many :service_intervals do |vehicle, params| if params[:include] && params[:include].include?(:service_intervals) vehicle.service_intervals end end
- 为什么我得到未定义的方法`cookies’?
- 基于令牌的Rails JSON API身份validation
- 过滤链停止为:validate_sign_up_params呈现或重定向 – devise_token_auth
- Rails:ActionDispatch :: Request.parameter_parsers用于multipart / form-data
- 强制所有收到的请求Content-Type为JSON
- 设计用户sign_in为CSRF令牌真实性令牌提供身份validation错误
- ActionController :: RoutingError:未初始化的常量Api :: V1 :: ApiController
- Rails API + AngularJS + Websocket-Rails gem