Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
877 views
in Technique[技术] by (71.8m points)

ruby on rails - How to set the ActionMailer default_url_options's :host dynamically to the request's hostname?

I am trying to set the :host for action mailer default url options.

I have the below set in all the environment files

config.action_mailer.default_url_options = {
  :host => "localhost"
}

I want to make it more dynamic by providing the request host.

when I try to set it by

config.action_mailer.default_url_options = {
  :host => request.domain
}

OR

config.action_mailer.default_url_options = {
  :host => request.env["SERVER_NAME"]
}

It throws error... doesn't recognize "request" object

is there any way I can set this to the request host, not by hardcoding...?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

It is also possible to set a default host that will be used in all mailers by setting the :host option in the default_url_options hash

in an application_controller.rb add:

class ApplicationController < ActionController::Base
  def default_url_options
    { host: request.host_with_port }
  end
end

Source: https://edgeguides.rubyonrails.org/action_controller_overview.html#default-url-options

Alternatively, you can pass the request when calling the mailer function from the controller

class UserMailer < ActionMailer::Base

  def welcome_email(user, request)
    @user = user
    @url  = user_url(@user, host: request.host_with_port ) # do this for each link
    mail(:to => user.email, :subject => "Welcome to My Awesome Site")
  end
end

Source : https://guides.rubyonrails.org/action_mailer_basics.html#generating-urls-with-named-routes


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...