2010-02-15 33 views
21

我有一個常量只用於視圖中,但在不同的地方以不同的方式使用它。這是一個選項名稱數組,用於選擇框,但我也在其他視圖中使用它來查看在此數組中是否存在字符串,並作出相應的響應。在Rails中處理視圖和僅有幫助常量的最佳方法

處理此問題以保持DRY的最佳方法是什麼?

我最初在助手中創建了一個常量,但這在視圖中似乎不可訪問。

我已經切換到幫助器中創建一個方法,除了返回常量之外什麼都不做。但是,這實際上似乎違背了Rails的精神,因爲現在基本上我使用的是較低的常量。

我當然可以將它固定在模型中,但它確實與任何模型無關。

回答

35

您可以在幫助器中定義常量,但您需要在視圖中以其完全限定名稱引用它們。

application_helper.rb

module ApplicationHelper 
    MyConstant = "something" 
end 

在任何觀點:

<%= ApplicationHelper::MyConstant %> 
+0

在控制器/模型中,可以執行'include ApplicationHelper',以避免鍵入它。你不能在視圖內部做到這一點,你能嗎? :/ – m33lky 2011-12-26 05:18:35

+0

事實證明,無論你包含在控制器中的模塊是否可用於視圖。 – m33lky 2011-12-27 01:04:31

+2

你也可以在助手中寫一個方法來引用它,所以你不必在視圖中重複助手的名字。 – Will 2016-04-28 01:03:40

5

把它放在config/initializers/constants.rb,它隨處可見。

+0

似乎有點不幸增加時,它僅會在觀點和助手使用的全局常量,我不知道這比僅僅使用方法來替代它更好。 – 2010-02-16 00:35:47

+0

僅供參考 - 在rails 4生產模式中不再是這種情況 - 模板存在於不同的名稱空間中,並且需要通過ApplicationController訪問常量:CONSTANT_NAME – Kevin 2014-03-13 21:01:06

相關問題