railsアプリ内で共通で使う変数の定義方法

アプリ内で共通で使いたい変数がある時はconstants.rbのファイルを作るのが一般的らしい。

config/initializers/constants.rb

module Constants
  HASH_DATA = { value: "key" }
end

参照する時は

Constants::HASH_DATA

 

コントローラー内で共通で使いたい時

application_controllerに書く

app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  HASH_DATA = { value: "key"}
end

 

または、concernsに

app/controllers/concerns/FooConstant.rb

module FooConstant
  HASH_DATA = { value: "key"}
end

として、

FooConstant::HASH_DATA

これで参照したりできる。
ちなみに、concernsで定義することの利点はコントローラーが三つ以上あって変数もたくさんあるとき、それぞれ読み込む変数を変えたいなどができそう(名前がぶつかりたくないので必要最低限読み込みたいみたいなことができる) app/controllers/concerns/ValueAConstant.rb

module ValueAConstant
  VALUE_A = "abc"
end

app/controllers/concerns/ValueBConstant.rb

module ValueBConstant
  VALUE_B = "zyx"
end

と定義しておいて app/controllers/func_a_controller.rb

class FirstController < ApplicationController
  include ValueAConstant
  def index
    p VALUE_A
  end
end

app/controllers/func_b_controller.rb

class FirstController < ApplicationController
  include ValueBConstant
  def index
    p VALUE_B
  end
end

app/controllers/func_c_controller.rb

class FirstController < ApplicationController
  include ValueAConstant
  include ValueBConstant
  def index
    p VALUE_A
    p VALUE_B
  end
end