web-dev-qa-db-ja.com

Rails 3にグローバル変数を配置する場所

Rails 2.3.8アプリケーションを使用して、environment.rbにグローバル変数を配置していました。

MAX_ALLOWD_ITEMS = 6

Rails 3.で動作しないようです。application.rbに入れてみましたが、役に立ちませんでした。

何を指示してるんですか?

25
Tam

Ryanの提案に従ってサーバーの再起動をすでに試みている場合は、application.rb このような:

module MyAppName
  class Application < Rails::Application
    YOUR_GLOBAL_VAR  = "test"
  end
end

次に、コントローラー、ビュー、またはどこにでも名前空間を付けて呼び出すことができます。

MyAppName::Application::YOUR_GLOBAL_VAR

別の代替手段は、 settingslogic のようなものを使用することです。 settingslogicでは、yml構成ファイルと、構成ファイルを指すモデル(Settings.rb)を作成するだけです。次に、Railsアプリでどこからでもこれらの設定にアクセスできます:

Settings.my_setting
47
johnmcaliley

私は通常、application_helper.rbを使用します。これは次のようになります。

module ApplicationHelper
  def my_global_variable 
    my_global_variable = "Helloworld!"      
  end
end

次に、my_global_variableを関数としてどこにでも置くことができます。

7
bhakku

あなたが言うようにconfig/environment.rbで本当にそれを定義している場合、私が問題を複製できる唯一の方法は、Rails serverを使用してサーバーを実行することです- then変数をconfig/environment.rbに入れ、ビューまたはコントローラでどこかで参照してから、アプリケーションの特定の部分をロードしようとします。

サーバーを停止して再起動すると、そのビューまたはコントローラーにアクセスしようとしても機能します。サーバーを再起動していないと思います。

2
Ryan Bigg

通常、config/initializers/yaml(yml)ファイル内にすべてのグローバルサイト設定を作成します。何かを変更するたびにサーバーを再起動することを忘れないでください。

1
bmac

変数をenvironment.rbに追加するソリューションが実際にRails3で機能するかどうかはわかりません。具体的には、次のようにモジュール定義内で変数を定義していない場合です。

module MyConfig
  Max_ints = 5
end

max_intsを単純な定義として含めるだけでは、Max_intsを使用することはできません。または、少なくとも私がこれを試してみたときに私が見つけたのはそれです。また、initializers /フォルダーを使用するという提案は、使いやすさの点でおそらくより良い解決策だと思います。参照 Railsの永続変数

0
sameers