20

私はかなり伝統的な忘れられたパスワードの電子メールに取り組んでいます-パスワードを変更するためにクリックできるリンクに埋め込まれたパスワード変更トークンをユーザーに電子メールで送信したいと思います。従来のActionMailer経由でメールを送信しています。

通常のlink_toタグを使用する場合

<%= link_to "click here", :controller => foo, :action => 'bar', :token => token %>

私は相対的なリンクを取得します-電子メールからはかなり役に立たないです。

追加した場合

:only_path => false、次に設定する必要があるというエラーが表示されdefault_url_options[:host]ます。ActionControllerのドキュメントは、コントローラーの#default_url_optionsメソッドをオーバーライドすることでこれを行うことを示しています。確かに、独自の構成ファイルを追加したり、解析したりせずに、ホスト名が何であるかをRailsに伝える構成オプションはありますか?

4

7 に答える 7

37

default_url_optionsから利用可能でありconfig.action_mailer、環境の構成ファイルで設定する必要があります。

たとえば、config/environments/production.rb

config.action_mailer.default_url_options = {
  :host => 'www.yourdomain.com'
}

ローカルテストの場合は、以下を変更しconfig/environments/development.rbます。

config.action_mailer.default_url_options = {
  :host => '127.0.0.1',
  :port => 3000
}

次に、という名前のルートがあると仮定するとforgot_password_login、次のようなものを使用して、メーラーにログインリンクURLを生成できます。

forgot_password_login_url(:token => 'a7s8q15sk2...')
于 2009-04-28T18:58:45.207 に答える
26

おそらく、:protocol=>'https'も設定する必要があります。

config.action_mailer.default_url_options = { 
    :host => "portal.example.com", 
    :protocol => 'https' 
}
于 2011-03-14T19:20:57.157 に答える
4

http://pivotallabs.com/how-i-leaned-to-stop-hating-and-love-action-mailer/で説明されているように、別の代替手段があります

このソリューションには、構成が不要であり(面倒が少ない)、コントローラー内から電子メールを送信する限り正常に機能するという利点があります。

ただし、コントローラーを経由せずに(コマンドラインから、または別の電子メールに応答して)電子メールを送信する場合は、静的構成が必要です。

于 2010-04-22T10:45:35.027 に答える
0

default_url_optionsRails 3.1では、直接設定することは推奨されていません。代わりにurl_forを使用してください。

:protocolデフォルト値(http)を上書きするパラメータを追加します:protocol => 'https://'。これにより、デフォルトの「http://」ではなく「https://...」で始まるURLが作成されます。

于 2012-09-06T07:34:27.087 に答える
0

興味深いことに、私はあなたと同じ問題を抱えていましたが、単体テストで(Michael Hartlのrailstutorialをフォローしている間)。test.rbファイルにこの行がありましたが、役に立ちませんでした。

config.action_mailer.default_url_options = { host: 'example.com', protocol: 'http' }

test.rbにこのような別の行も追加しましたが、驚くべきことにこれで問題が解決しました

default_url_options = { host: 'example.com', protocol: 'http' }
于 2017-02-26T15:28:28.680 に答える
-1

default_url_optionsを直接設定することは、Rails3.1では非推奨です。

url_forヘルパーを使用して作成します。

<%= link_to "click here", url_for(:controller => foo, :action => 'bar', :token => token, :host => 'www.yourdomain.com') %>
于 2012-01-19T17:36:22.767 に答える
-2

あなたはただすることができます

<%="click here", :controller => foo, :action => 'bar', :token => token, :host=>request.host -%>
于 2009-04-28T18:00:07.653 に答える