0
我有它加載一個YML文件,分析它通過再培訓局,並在一個恆定的存儲結果散列一個初始化的訪問應用範圍在懶洋洋地定義常量一個Rails初始化程序
# config/initializers/links.rb
LINKS = YAML.load(
ERB.new(File.read(Rails.root.join("config", "links.yml"))).result
)
的原因ERB是在YML文件中的一些元素依靠URL幫手,需要模板 -
# config/links.yml
---
footer:
homepage:
personal: <%= personal_path %>
root: <%= root_path %>
foo: bar
....
的問題是,當初始化運行時,會因爲Rails環境尚未初始化失敗,(我想?)所以這些幫助者定義不存在。
要解決的是,我懶洋洋地閱讀文件,所以它只被解析的時候,它被稱爲是第一次(這是我們加載了environment
後大概)
# config/initializers/links.rb
def links
unless defined? LINKS
links = YAML.load(
ERB.new(File.read(Rails.root.join("config", "links.yml"))).result
)
const_set("LINKS", links)
end
LINKS
end
但現在我因爲const_set
不是已定義的方法,因此出現錯誤。
如何在此場景中設置常量?
此方法是否確保在第一次調用常量時全局定義常量(即應用程序範圍)?如果從視圖/控制器/模型/等調用
links()
...我不希望該常量在該類的上下文中進行設置。
謝謝!
謝謝!我喜歡這種方法 - 我在哪裏定義「模塊」?也是爲了好奇,是否還有一種方法可以用我最初設定常數的方法來實現呢? – user2490003
你可以像往常一樣將它放入app/helpers。當然,你可以用LINKS = YAML.load(ERB.new(File.read(Rails.root.join(「config」,「links.yml」)))result)來更改這個模塊的所有主體,除非定義? LINKS'來定義一個常量,但它會在每個請求中重新加載。我還沒有想法如何在具有可用輔助方法的初始化器中定義它。 – Mareq