Rails Diary

プログラミングの学習記録です。

環境ごとの定数管理

okmt-aya-26.hatenablog.com

この記事で記載したconfig.aciton_mailer.default_url_options = { host: localhost:3000 }について深堀りしたい。

↑でメール内のリンクが上手く通らなかったのは、:hostパラメータを明示的に指定していなかったため(2.7 Action MailerのビューでURLを生成する | Railsガイド参照)。現にhostの記述を追加したことで解決している。

解答例の書き方を噛み砕いてみる

# config/environments/development.rb

config.action_mailer.delivery_method = :letter_opener_web
config.action_mailer.default_url_options = Settings.default_url_options.to_h

to_hメソッドの部分は何をしてる?

【Ruby】 to_hメソッドの使い方を理解しよう | Pikawaka
二次元配列をハッシュに変換するメソッド

https://i.gyazo.com/e3da861da44afb8064c875ee8c876860.png

[["name", "dog"]]

こういうのを二次元配列というらしい。
[key, value]のペアとして作成した配列に対し、to_hメソッドを実行する。この時、二次元配列でないとエラーが出る。

# キーは文字列でなく、シンボルでも指定ができる
animal = [[:name, "dog"],[:age, 5]]
animal.to_h
=> {:name=>"dog", :age=>5} 

もう一度確認してみる

# config/environments/development.rb
config.action_mailer.default_url_options = Settings.default_url_options.to_h
# config/settings/development.yml
default_url_options:
  host: 'localhost:3000'

# => default_url_options = [[:host, "localhost:3000"]]
Settings.default_url_options.to_h
# => {:host => "localhost:3000"}

config.aciton_mailer.default_url_options = { host: localhost:3000 }

( д) ゚ ゚

アハ体験をした

感想

今の段階の謎としては、「development.rb」という開発環境のファイルに記載しているんだから{ host: localhost:3000 }とそのまま記載しちゃダメなの?と思っちゃうけどどうなんだろう?🤔

果たしてこれが分かりやすいのかと、今の自分に聞かれるとうーんと唸ってしまう。ただ定数を環境ごとに管理することで、メンテナンスの際に修正箇所が少なく済むというのはよく分かルような分からないような。。