Ich muss die Passwort vergessen Anweisungen anpassen, um eine Subdomain zu behandeln. Ich habe die Anweisungen auf der devise Website folgte dem Mailer, Controller und fügen Sie einen Sub-Domain Helfer usw. aufgeführten außer Kraft zu setzen:Rails übergeben request_domain in ein benutzerdefiniertes Devise Mailer Layout
Controller/password_controller.rb
class PasswordsController < Devise::PasswordsController
def create
@subdomain = request.subdomain
super
end
end
routes.rb
devise_for :users, controllers: { passwords: 'passwords' }
devise.rb
config.mailer = "UserMailer"
Mailer/user _mailer.rb
class UserMailer < Devise::Mailer
helper :application # gives access to all helpers defined within `application_helper`.
def confirmation_instructions(record, opts={})
devise_mail(record, :confirmation_instructions, opts)
end
def reset_password_instructions(record, opts={})
devise_mail(record, :reset_password_instructions, opts)
end
def unlock_instructions(record, opts={})
devise_mail(record, :unlock_instructions, opts)
end
end
views/user_mailer/reset_password_instructions.html.erb
<p>Hello <%= @resource.email %>!</p>
<p>Someone has requested a link to change your password. You can do this through the link below.</p>
<p><%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token, :subdomain => @subdomain) %></p>
<p>If you didn't request this, please ignore this email.</p>
<p>Your password won't change until you access the link above and create a new one.</p>
Helfer/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
application.rb
config.to_prepare do
Devise::Mailer.class_eval do
helper :subdomain
end
end
Jetzt, Dieser Code ist alles wor König, aber es kann einfach nicht den Wert von @subdomain in der Mailer-Ansicht erhalten. Wenn ich @subdomain durch eine fest codierte Zeichenfolge ersetze, wird die korrekte URL in der E-Mail übergeben, sodass ich weiß, dass der Code korrekt ist.
Wie bekomme ich die im Controller definierte Instanzvariable @subdomain in die Mailer-Ansicht?
Dies kann leichter erhalten, wenn diese zusammen erhalten: https://github.com/plataformatec/devise/pull/2207 –
endlich eine Chance, diese heraus zu überprüfen - und es ist alles arbeiten, stimmen sie ein wenig fühlt unrein, aber ich kann hier wirklich keine einfache, saubere Lösung finden - danke, das ist eine massive Hilfe! –