我想實例化一個可以通過所有應用程序訪問的數組,數組可能會在應用程序運行時發生更改,但應用程序再次啓動時會重新生成該數組。Ruby on Rails全局數組
雖然我已經把這個數組放在ApplicationController中,但是一旦請求結束就會死掉?我只需要它在每次應用程序開始運行時填充一次,而不是每次調用控制器操作。
該數組從數據庫中填充並且必須已經加載。
在此先感謝您的任何指導。
我想實例化一個可以通過所有應用程序訪問的數組,數組可能會在應用程序運行時發生更改,但應用程序再次啓動時會重新生成該數組。Ruby on Rails全局數組
雖然我已經把這個數組放在ApplicationController中,但是一旦請求結束就會死掉?我只需要它在每次應用程序開始運行時填充一次,而不是每次調用控制器操作。
該數組從數據庫中填充並且必須已經加載。
在此先感謝您的任何指導。
您可以創建一個簡單的類來保留這些信息給你。例如,您可以添加如下配置/初始化/ my_keep.rb:
class MyKeep
def self.the_array
@@the_array ||= # Execute the SQL query to populate the array here.
end
def self.add element
if @@the_array
@@the_array << element
else
@@the_array = [element]
end
end
end
在您的應用程序,你叫MyKeep.the_array
陣列將被從數據庫中填充,所以你甚至可以做到這一點在第一時間相同的文件或在application.rb文件中的after_initialize塊中。然後,您可以使用MyKeep.add(element)
添加數組,您將可以使用MyKeep.the_array
獲取數組值。每個請求都不應該重新設置這個類。
實際上它是一個模型,它不一定是一個數組,我從couchdb預加載文件,以便我可以進行全文搜索。 – 2011-03-17 17:15:39
那很好。不管你想要什麼,你都可以修改這個類。沒有必要使用數組。該解決方案允許您保留最初從數據庫預加載的變量,並在整個應用程序生命週期中添加該變量。你應該修改它以適合你的用例。 – 2011-03-17 17:48:06
不,不起作用。 – 2013-06-17 08:20:57
在裏面創建一個文件config/initializers
叫做whatever-want-want.rb並在那裏放置代碼。
THIS_IS_AN_ARRAY = [1,2,3,4]
然後,您應該能夠訪問THIS_IS_AN_ARRAY
在你的應用程序。
如果你確實使用全局(記住它只是* PER-PROCESS *),至少給它一個單獨的名稱空間,例如它可能被稱爲'MyGlobals :: stats'或whatnot。但最好有可能將它包裝在一個單獨的對象中(不,不是*,那就是*類型的單例...)然後:'MyStats.add_stat(etc)' – 2011-03-17 16:41:31
如果你有多個應用程序運行,應該可以訪問所有他們?例如,在服務器上,您可能同時運行5個rails應用程序,並且它們都不共享內存。 – 2011-03-17 16:41:59
我忘了說數組是從數據庫中填充的,所以必須先初始化。 – 2011-03-17 16:43:11