0
Help us understand the problem. What are the problem?

posted at

updated at

定数だけを切り出したファイルを作り、複数クラスで使えるようにする

やりたいこと

Rubyで定義した定数を他のクラスでも使いたいとき、クラス名::定数名のように書くと思う。

ほとんどの場合は問題ないけれど、ときどき下記のような違和感や問題を感じるときがある。

  • 関連が強いor内容が似てる複数のクラスで同じ定数を使いたいとき、特定のクラスにだけ定数を記載し、他のクラスではクラス名::定数名と書くことへの違和感
  • クラス名が長いときなどに読みづらくなる

なのでより読みやすい、使いやすい形にしたかった。

( config/initializers/constants.rbで共通の定数を設定する方法もあるが、そこまで全体的に使いたい訳でもない場合を想定 )

どうするか

定数用のmoduleを作って、定数を使いたいクラスにそのmoduleを読み込んで使う

やりかた

  1. moduleを作成し、定数を記載する
  2. 使いたいクラスで読み込む

1. moduleを作って定数を書く

HogeConstants.rbを作成し、定数を書く

module HogeConstants

 NEKO = "neko".freeze
 INU = "inu".freeze
 DORAEMON = "doraemon".freeze
 
end

2.使いたいクラスで読み込む

class Hoge < ApplicationRecord

 require "hoge_constants"
 include HogeConstants

end

moduleはincludesを使わないとエラー出るので注意。

これで複数のクラスで「クラス名::」を書かなくても定数が使える。

もっといい方法や、ツッコミあったら是非いただきたいです🙏

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?