Как насчет перехода на after_save
метод обратного вызова, где вы сохраняете все поля, которые были изменены, и просто сохраняете их все сразу, чтобы повторить.
Что-то вроде:
class Foo < ActiveRecord::Base
after_save :persist_to_redis
attr_accessor :redis_attributes
def share_points=(p)
@redis_attributes ||= {}
@redis_attributes[:share_points] = p
end
def something_else=(p)
@redis_attributes ||= {}
@redis_attributes[:something_else] = p
end
private
def redis_store_share_points(value)
$redis.set("store:#{self.id}:key", value)
end
def redis_store_something_else(value)
$redis.set("something_else:#{self.id}", value)
end
def persist_to_redis
$redis.multi do
@redis_attributes.each_pair do |key, value|
send("redis_store_#{key}".to_sym, value)
end
end
end
end
Я думаю, что даже это можно было бы реорганизовать и очистить, но вы поняли.