[英]Existing Rails model without fetching it from the database
有谁知道是否可以创建一个 model 实例并应用 ID 和任何其他属性而无需从数据库加载它? 我试过这样做,但没有从数据库中获取关联:(有什么想法吗?
编辑
我想要完成的只是这样:
这就是我卡住的地方,我一直在做的是创建一个 Model.new object 并手动设置每个参数。 这可行,但它将实例化的 model object 视为新记录。 ActiveRecord 中必须有一个中间子程序来进行属性设置。
我通过执行以下操作解决了这个问题。
Create a new model class which extends the model class that I want to have cached into memory.
将新 class 的 table_name 设置为与父 class 相同的名称。
创建一个新的初始化方法,在其中调用超级方法,然后允许该方法的参数允许包含父 class 的所有属性的 hash 变量。
重载方法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
memcached gem 将允许您将任意 Ruby 对象推入其中。 如果您正在使用它,这一切都应该透明地为您处理。
否则,看看 ActiveRecord::Base#instantiate 看看它是如何正常完成的。 您将不得不通过一堆 Rails 堆栈进行跟踪,但这就是您尝试这种骇客所得到的!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.