[英]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.