Ho bisogno di adattare le istruzioni della password dimenticata per gestire un sottodominio. Ho seguito le istruzioni sul sito escogitare per ignorare il mailer, controller e aggiungere un aiutante sottodominio ecc come elencato:Rails passa request.subdomain in un layout di mailing personalizzato di Devis
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/utente _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>
aiutanti/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
Ora, questo codice è tutto lavoro re, ma non riesce a ottenere il valore di @subdomain nella vista mailer. Se sostituisco @subdomain con una stringa hard-coded, l'e-mail corretta viene passata nell'e-mail, quindi so che il codice è tutto corretto.
Come si ottiene la variabile di istanza @subdomain definita nel controller nella vista mailer?
Questo può ottenere più facile quando questo ottenere fuse: https://github.com/plataformatec/devise/pull/2207 –
finalmente avuto la possibilità di controllare questo fuori - ed è tutto lavoro, d'accordo ci si sente un po ' impuro ma non riesco davvero a trovare una soluzione semplice e pulita qui - grazie, questo è un grande aiuto! –