2010-10-04 49 views
34

可能重複:
Ruby on Rails: Where to define global constants?在哪裏/如何在Rails代碼常量3應用

我感興趣的一個新的應用程序這樣的 「Rails的路」。我還想在某種上下文中引用常量,以使代碼更具可讀性。我有一個應用程序,用戶可以請求訪問其他用戶的數據集。這AccessRequest可以有以下幾種狀態之一:

評論 拒絕 批准

我可以看到在未來的報告功能正在使用這些值,所以我要讓他們常數,以避免任何的拼寫或資本化問題。我想我只是把這些放在config/initializers目錄下的constants.rb文件中。

我想把這些稱爲AccessRequest :: REVIEW。既然我已經有了一個叫做AccessRequest的模型,那麼把它們放在那裏有意義嗎?或者把它們包裝在config/initializers目錄下的constants.rb文件中的一個類中? Rails方式是哪種方式?

回答

42

您不需要在Rails 3中使用常量。最好使用Rails :: Application單例。

在你的application.rb中,你可以定義你像康斯坦特:

module Yourapp 
    class Application < Rails::Application 

    config.access_request.review = 'xxx' 
    end 
end 

在你的代碼後,你可以調用

Yourapp::Application.config.access_request.review 

後,如果你在每個環境變化值,你剛纔定義您的config/environments/production.rb或其他環境中的config.xx。

+6

什麼,發展和生產之間改變常量:API密鑰,啓用/禁用電子郵件或功能等? – 2010-10-04 16:02:25

+1

是的,但你只需要在config/environments/production.rb和其他environement – shingara 2010-10-04 16:46:03

+0

中進行更改謝謝你的所有反饋shingara和Brian。 – AKWF 2010-10-05 15:35:43

28

遲到的答覆,但張貼,因爲這個答案仍然出現在搜索結果中。將常數置於模型中是有意義的,因爲常數直接與它有關。使用Rails應用程序配置來存儲常量是不正確的。

按在application.rb中列出的評論:

# Application configuration should go into files in config/initializers 
# -- all .rb files in that directory are automatically loaded 

This is still valid as of Rails 3.

+1

這是絕對正確的薩沙,謝謝你指出。這已成爲一個受歡迎的問題。我在前兩個項目中使用了initializers目錄,取得了巨大的成功。當你需要將一些部署敏感的常量分開保存並配方時,它非常方便。 – AKWF 2011-04-28 12:33:12

+6

@AKWF以這種方式使用初始化器時,您用於定義常量的範圍是什麼?例如,假設我們的初始化器存在於'config/initializers/constants.rb'中。你會在全局範圍內放置「MAGIC_NUMBER = 42」嗎?用「YourApp」模塊或其他東西包裝它? – evanrmurphy 2012-03-06 20:29:25

+0

你如何使不同的環境的常量不同?我正在尋找可從我的ERB模板訪問的環境特定常量。 – Bradley 2012-07-13 19:42:39