Railsの:actionmailerのビューで完全なURLを生成します
-
20-09-2019 - |
質問
私は、サインアップの確認メールを送信するためにactionmailerのを使用しています。電子メールは、ユーザを確認するために戻ってサイトへのリンクが含まれている必要がありますが、私は(ドメインなどを含む)の完全なURLを生成するためのRailsのを説得することはできません。
私が使用しています:
<%= url_for :controller => 'login', :action => 'verify', :guid => @user.new_user.guid, :only_path => false, :host => 'http://plantality.com' %>
私の見解では、
パートB:
私は上記のリンク内のホストexpliciltyを指定しない場合は、開発モードでは、不満をレール。しかし、私は生産でこれを行うにはしたくありません。任意のソリューション?
解決
actionmailerの中でURLを生成するためのホストを渡すために、問題を解決するために、このプラグインのとrel="noreferrer">のを書いた理由は理由ます。
該当する場合という名前のルートを使用し、最初の問題を解決するには。代わりの
<%= url_for :controller => 'login', :action => 'verify', :guid => @user.new_user.guid, :only_path => false, :host => 'http://plantality.com' %>
を使用し、ルートがlogin
呼ばれる仮定
<%= login_url(:guid => @user.new_user.guid) %>
注、私はlogin_url
、ないlogin_path
を使用しています。
他のヒント
私はそれはあなたが望むものであるのかはわからないが、設定/環境/ development.rbにあなたはメーラのURL
のデフォルトオプションを指定することができますconfig.action_mailer.default_url_options = {
:host => "your.host.org",
:port => 3000
}
あなたが設定/環境/ production.rbで同じことを行うことができます。
私は、以前のソリューションは非常に複雑に見える理由は分からないが、私はここにいるので、なぜ私の2セントを与えることはありません...
/config/environments
と追加して行きます:
config.absolute_site_url = 'your site url'
それぞれの環境のために(すなわち。development.rb、test.rb、またはproduction.rbで)。 Webサーバーを再起動します。
これは、目的のURLを取得するためにRails.application.config.absolute_site_url
を呼び出すことができます。プラグインや奇妙なチートの必要は、単にアプリケーションの広い変数としてサイトのURLを保存しません。
私はそのことを100%正しい方法だと思いますが、これも解決策になることができます:
を使用して、資産のホストを参照してくださいのドキュメントに。あなたはasset_host
を指定する必要があります。あなたはまた、要求の連鎖"#{request.protocol}#{request.host_with_port}/login/?guid=#{@user.new_user.guid}"
から動的に構築することができます。
URLを生成するには、これを試してください。
Rails.application.routes.url_helpers.user_url(User.first.id, host: 'yourhost.io')
これは、このようなURLを生成します。
同様に、あなたは、いくつかのparamsを渡すことができます。
expires = Time.now + 2.days
params = {expires: expires}
u = User.first.id
Rails.application.routes.url_helpers.user_url(u, params, host: 'host.com')
生成されます:
http://yourhost.io /users/1.expires=2018-08-12+15%253A52%253A15+%252B0300する
リンクの有効期限が切れていない場合は、アクションにwerifiことができるように