[ruby-on-rails] Rails 4.1 Anteprime di Mailer e creazione di e-mail personalizzate


Answers

Per coloro che desiderano visualizzare l'anteprima di Devise e-mail senza usare mailer personalizzati, (ma comunque e-mail personalizzate) questo è quello che ho fatto (funziona in Rails> = 4.1):

  1. Configura la tua app per l'anteprima della posta elettronica.

  2. Imposta la classe di anteprima di Devise Mailer

    # mailer/previews/devise_mailer_preview.rb
    class Devise::MailerPreview < ActionMailer::Preview
    
      def confirmation_instructions
        Devise::Mailer.confirmation_instructions(User.first, "faketoken")
      end
    
      def reset_password_instructions
        Devise::Mailer.reset_password_instructions(User.first, "faketoken")
      end
    
      ...
    
    end
    
  3. Riavvia il server

Question

Ho una nuovissima app Rails 4.1.1 dove sto personalizzando le email Devise. Voglio che vengano visualizzati nella nuova funzionalità di anteprima e-mail di Rails, così ho fatto quanto segue:

1) Aggiunto il seguente snippet al mio file config/development.rb :

config.action_mailer.preview_path = "#{Rails.root}/lib/mailer_previews"

2) Creato il mio utente personalizzato UserMailer email UserMailer in app/mailers/user_mailer.rb :

class UserMailer < Devise::Mailer   
  helper :application # gives access to all helpers defined within `application_helper`.
  include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url`

  layout "notifications_mailer"
end

3) config/initializers/devise.rb per contenere il seguente snippet:

config.mailer = 'UserMailer'

4) Aggiunta la classe UserMailerPreview a lib/mailer_previews con il seguente contenuto:

class UserMailerPreview < ActionMailer::Preview
  def confirmation_instructions
    UserMailer.confirmation_instructions(User.first, {})
  end

  def reset_password_instructions
    UserMailer.reset_password_instructions(User.first, {})
  end

  def unlock_instructions
    UserMailer.unlock_instructions(User.first, {})
  end
end

Fin qui tutto bene. Sembra che abbia fatto tutto bene. Ma poi provo a vedere l'anteprima per l'email di confirmation_instructions nel percorso / rails / mailers / user_mailer / confirmation_instructions e ottengo il seguente errore:

undefined method `confirmation_url' for #<#<Class:0x007fa02ab808e0>:0x007fa030fb7e80>

il codice per il mio modello confirm_url.html.erb appare così:

<%= t("notifications.texts.greeting") + @user.display_name %>,

<p>You can confirm your account email through the link below:</p>

<p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token =>  @token) %></p>

Che cosa sto facendo di sbagliato? Immagino che sia qualcosa di sbagliato nel modo in cui chiamo il metodo confirmation_url . Qualcuno può aiutarmi qui?




Usando Rails 5 e trovato la sintassi leggermente diversa dall'eccellente risposta di @ steel, con l'uso del doppio "::" che è la differenza:

# Preview all emails at http://localhost:3000/rails/mailers/devise_mailer
class DeviseMailerPreview < ActionMailer::Preview

    def reset_password_instructions
        Devise::Mailer.reset_password_instructions(User.first, "faketoken")
    end
end



Related