有没有人知道是否可以创建模型实例并应用ID和任何其他属性而无需从数据库加载它?我试过这样做,但没有从数据库中获取关联:(任何想法?
修改
我想要完成的只是:
这就是我被困住的地方,我一直在做的是创建一个Model.new对象并手动设置每个参数。这有效,但它将实例化的模型对象视为新记录。在ActiveRecord中必须有一个中间子程序来进行属性设置。
答案 0 :(得分:1)
我通过以下方式解决了这个问题。
创建一个新的模型类,扩展我希望缓存到内存中的模型类。
将新类的table_name设置为与父类相同的表。
创建一个新的initialize方法,在其中调用super方法,然后允许该方法的参数允许包含父类的所有属性的哈希变量。
重载方法new_record?
并将其设置为false
,以便关联起作用。
这是我的代码:
class Session < User
self.table_name = 'users'
METHODS = [:id, :username] # all the columns that you wish to have in the memory hash
METHODS.each do |method|
attr_accessor method
end
def initialize(data)
super({})
if data.is_a?(User)
user = data
data = {}
METHODS.each do |key|
data[key] = user.send(key)
end
else
data = JSON.parse(data)
end
data.each do |key,value|
key = key.to_s
self.send(key+'=',value)
end
end
def new_record?
false
end
end
答案 1 :(得分:0)
memcached gem允许你将任意Ruby对象推入其中。如果你正在使用它,这应该透明地为你处理。
否则,请查看ActiveRecord :: Base #instantiate以了解它是如何正常完成的。你将不得不追踪一堆铁轨堆栈,但这就是你尝试这样的hackery所得到的!