module ReadYourWrites
TTL = 10
def pin_primary!
session[:pin_primary_until] = Time.current.to_i + TTL
end
def pinned_to_primary?
session[:pin_primary_until].to_i > Time.current.to_i
end
end
class SnipsController < ApplicationController
include ReadYourWrites
def create
snip = current_member.snips.create!(snip_params)
pin_primary!
redirect_to snip
end
def show
scope = pinned_to_primary? ? Snip.all : Replica.read { Snip.all }
@snip = scope.find(params[:id])
end
end
With replicas, a user can create a record then immediately not see it due to replication lag. A simple mitigation is to pin subsequent reads to primary for a short window after writes.