Основное решение, описанное в вики Devise, не работает для настройки произвольных поддоменов и является проблемой, если вы запускаете генерацию электронной почты во время запроса в одном поддомене (или корневом домене вашего приложения) и хотите ссылкив сообщении электронной почты для ссылки на другой поддомен.
Общепринятый способ заставить его работать - это предоставить url_for
помощнику параметр :subdomain
.
# app/helpers/subdomain_helper.rb
module SubdomainHelper
def with_subdomain(subdomain)
subdomain = (subdomain || "")
subdomain += "." unless subdomain.empty?
host = Rails.application.config.action_mailer.default_url_options[:host]
[subdomain, host].join
end
def url_for(options = nil)
if options.kind_of?(Hash) && options.has_key?(:subdomain)
options[:host] = with_subdomain(options.delete(:subdomain))
end
super
end
end
Следующий шаг -решающее значение, и я подозреваю, что это - то, где много людей сбито с толку (я знаю, что сделал).Убедитесь, что Devise смешивает ваш новый вспомогательный субдомен с объектами почтовой программы, добавив следующий код в config/application.rb
config.to_prepare do
Devise::Mailer.class_eval do
helper :subdomain
end
end
Теперь, когда вы делаете link_to
в своем шаблоне почтовой программы Devise, вы можете легко указать:subdomain
опция.
link_to 'Click here to finish setting up your account on RightBonus',
confirmation_url(@resource, :confirmation_token => @resource.confirmation_token, :subdomain => @resource.subdomain)