Model内で route helper(*_url)を使うと、ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true になる

model内で route helper ( *_url )であるRails.application.routes.url_helpers.root_url を呼び出したときに、エラーが出たのでその対処法を記載する。

エラーメッセージ

ArgumentError: Missing host to link to!
Please provide the :host parameter, set default_url_options[:host], or set :only_path to true

*_url によりホスト付きのパスをしたいんだけど、デフォルトでhostが設定されてないから、URLを生成できないよ。default_url_options を設定するか、only_path: true を設定してね。ってことが書いてある。

default_url_options の設定方法

enviroment に設定する

動的に変わらない場合は、こちらに設定しましょう。

Rails.application.routes.default_url_options = { host: "xxx.xx.xx" }

Rails.application.configure.action_mailer.default_url_options に設定する要領で記載します。

only_path: true とは?

ホストなしのURLを生成します。(*_path で生成されるパスと同じ)


参考

RailsでMissing host to link to!が出たときに。model内でURL組み立てる場合の設定 - Qiita