Rails で、環境によって分岐するコードの書き方です。 環境によって出力を変更できれば開発環境のときのみ画面に説明を表示することも可能です。
環境を判別する方法
Rails.env.development?, Rails.env.production? が true/false を返すので、それで判定します。
|
1 2 3 |
if Rails.env.development? // what you want to do end |
Rails.env とはなんなのか
Rails.env は String ではなく、 String を継承したActiveSupport::StringInquirer です。 StringInquirer は次のように使えます。
|
1 2 3 |
vehicle = ActiveSupport::StringInquirer.new('car') vehicle.car? # => true vehicle.bike? # => false |
ところでこの StringInquirer のメソッドはどのように実装されているのでしょうか。
こちらが 時点での ActiveSupport::StringInquirer (master branch) です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# frozen_string_literal: true module ActiveSupport class StringInquirer < String private def respond_to_missing?(method_name, include_private = false) (method_name[-1] == "?") || super end def method_missing(method_name, *arguments) if method_name[-1] == "?" self == method_name[0..-2] else super end end end end |
ActiveSupport::StringInquirerはStringに細工をしたものだということがわかります。 ここから、 String のもつメソッドはすべて使えることもわかります。
