gpt4 book ai didi

ruby-on-rails - Rails 获取序列化模型记录

转载 作者:IT王子 更新时间:2023-10-29 06:12:21 25 4
gpt4 key购买 nike

我正在设置一个 Redis 存储,其中我的 session user_id 值存储在 cookie 中,其余模型数据(first_name、last_name、用户名等)存储在 redis 中。我是 Redis 的新手,我不确定如何存储模型数据。

我有两个问题:

  1. 最好的存储方式是什么,我应该将其序列化为 XML、JSON 还是等效的 ruby​​ 对象。

  2. 获取存储的数据后,如何将其转换为工作模型对象?这样,当我执行 user_fetched_from_redis.username 时,它​​就会像 user_fetched_from_db.username 一样工作。如果有任何字段不是从 redis 存储中获取的,那么我希望 activerecord 执行 SELECT * FROM 语句来填充对象中的所有属性。这可能吗?

最佳答案

看看如何resque处理这个。基本上,他们使用 JSON 对象而不是 XML 或转储的 Ruby 对象,我提倡使用相同的方法,因为这意味着更少的开销。 Rails 为许多不同的对象(包括 ActiveRecord 实例)提供了非常简单的 .to_json 功能。

如果您使用 JSON 来序列化您的对象,那么当您反序列化它时,它会扩展为一个普通的散列。传递它来创建可以继承属性并使用 method_missing 从 json 对象获取属性或加载相关数据库记录的自定义类并不难。这样的事情应该有效:

class CachedObject
attr_accessor :attributes

def initialize(json)
self.attributes = ActiveSupport::JSON.decode(json)
end

def method_missing(method)
attributes[method.to_s] || Model.find_by_id(attributes['id']).send(method)
end
end

obj = CachedObject.new('{"id":"123","foo":"some value"}')
p obj.foo # => "some value"
p obj.bar # => Executes `Model.find_by_id(123).bar`

关于ruby-on-rails - Rails 获取序列化模型记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6617871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com