0
我有這個文本文件,我必須經常引用它裏面的值。我必須將數據庫中的某些值與文本文件中的某些條目進行比較。這兩個數據集都非常大。我不會將這個文本文件(我將它稱爲changefile
)加載到數據庫中,因爲在數據庫中進行比較會花費太長時間。我不把changefile
到數據庫表,因爲它更容易從文件中讀取,我不希望有一個新的發佈新的changefile
每次搜索的上傳。如何在每個部署中緩存模型中文本文件的內容?
我做,而不是從數據庫到文本字符串讀了一系列的記錄,文件讀入到文本字符串,然後比較這些。
我具有其中從changefile文本字符串中的變量被表示的模型。它看起來像這樣:
class Standard < ActiveRecord::Base
def changes
@changes ||= read_the_file_into_an_array
end
end
這是一件好事,因爲我只是在做一次讀取的文件。但是,這是Standard
類的實例化。我想要做的是確保我只按deployment
讀取一次文件。
的文件讀入某種醜陋的全局變量的初始化器之外,我能做些什麼,以確保我只看過一次文件的Rails後開機?
* UPDATE *
class MyObject < ParentObject
@changes ||= get_changes
class << self
attr_accessor :changes, :get_changes
def get_changes
<read file and return array>
end
end
end
不能得到這個工作。錯誤:
NameError: undefined local variable or method `get_changes' for MyObject:Class
我不明白。爲什麼get_changes
被作爲local
變量訪問?
退房類變量將其加載到變量或配置。我想這就是你要找的。此頁面可以讓你開始:http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/ – Coenwulf
我知道該怎麼做了靜態值就像在這個例子中那樣,但是是否也可以使用setter來設置只會觸發一次的類變量? – AKWF
def self.changes; @@ changes || = read_the_file_into_an_array; end – Coenwulf