5

いくつかの異なるリンクを含む ActionMailer のビューがあります。現在、localhost:3000 で実行しているので、app/initializers で呼び出されるファイルにそのように設定しました(ここsetup_mail.rbに示されているように):

ActionMailer::Base.default_url_options[:host] = "localhost:3000"

ビューで使用するurl_forと、この値がプルされないようです。:host => "localhost:3000"その後、各タグに追加するとurl_for、正しく機能します。しかし、それらが含まれていないと機能しません。

別のタグ がproject_urlありますが、これは表示どおりです。指定されたプロジェクトへのリンクです。これは、ホスト値を含めて、project_url(@project). 一方が機能するのに、もう一方が機能しないのはなぜですか?

私が読んだすべてからdefault_url_options[:host]、イニシャライザでを設定すると、タグの:host値を省略できるはずです。url_for明らかに、その値を追加することは世界で最悪のことではありませんが、それは不必要に思えます。つまり、最終的にプロジェクトをどこかでホストするときに、その値をすべての場所で変更して変更する必要があることを意味します. しかし、それよりも悪いことに、それは私には理解できないものです。私はここに行ってまだ学んでいるので、何が間違っているのか知りたいです.

4

4 に答える 4

3

ドキュメントはこれについてかなり明確です

メーラーにデフォルトの:hostを設定する場合は、url_forを使用するときに必ず:only_path=>falseオプションを使用する必要があります。:hostオプションが明示的に指定されていない場合、url_forビューヘルパーはデフォルトで相対URLを生成するため、:only_path => falseを渡すと、絶対URLが確実に生成されます。

url_for強制:only_pathする代わりに使用する独自のヘルパーを作成できますfalse

def your_url_for(options = {})
  options.reverse_merge! only_path: false
  url_for(options)
end

パッチレールをモンキーパッチしてこれをデフォルトとして強制することもできますが、それはあなたに任されています:)

これはすべて、追加に追加されます

config.action_mailer.default_url_options = { host: "YOUR HOST" }

config/application.rb同等。

于 2012-10-26T21:48:35.410 に答える
2

オプションはfalseのよう:only_pathですが、これはデフォルトです。そのため、 [:host]すべてのタグに明示的に指定するか、url_forすべてのタグに適用されるデフォルトのオプションを設定する必要があります。デフォルトのホストを設定する方法は次のとおりです。

このコードをアプリケーションコントローラーに入れると、機能するはずです。

helper_method :url_for
def default_url_options(options)
  { host: 'localhost:3000' }
end

詳細については、seturl_fordefaultsを確認してください

于 2012-10-26T21:18:32.150 に答える
1

初期化後に変更すべきではないグローバルなデフォルト設定を改ざんする代わりにdefault_url_options、コントローラーで行うのと同じように、メーラーでメソッドを定義するだけです。

class UserMailer < ActionMailer::Base
  def default_url_options
    { host: Tenant.current(true).host }
  end

  def confirm(user)
    @user = user
    mail(to: @user.email, subject: t(".subject_confirm"))
  end
end
于 2014-04-11T21:17:27.943 に答える
-3

ActionMailer::Base でデフォルトを設定していますが、ActionController::Base のデフォルトをリセットすることを期待しているようです。

メーラー ビュー内の <%= link_to %> は、それがメーラー ビュー内にあるという事実を必ずしも認識しているとは限りません。

于 2012-10-26T21:19:15.753 に答える