personalizado gratis crear correo ruby-on-rails ruby ruby-on-rails-4 devise

ruby on rails - gratis - Rails 4.1 Avances de correo y diseñar correos electrónicos personalizados



crear correo personalizado gratis (4)

Encontré esta pregunta porque estaba intentando averiguar cómo hacer una vista previa de mis propios correos electrónicos. Copié tu código casi exactamente y funciona bien para mí.

Lo único que hice de manera diferente fue eliminar el layout "notifications_mailer" línea layout "notifications_mailer" de UserMailer . Cuando lo UserMailer , recibí un mensaje de error que Missing template layouts/notifications_mailer . ¿Qué pasa si lo quitas?

La línea Devise::Controllers::UrlHelpers definitivamente incluye el método confirmation_url (puede verlo usted mismo abriendo la consola de Rails y ejecutando include Devise::Controllers::UrlHelpers then confirmation_url , así que sospecho que el problema es que sus vistas previas no son No está representado por UserMailer en absoluto. No estoy seguro de por qué, pero el layout "notifications_mailer" línea layout "notifications_mailer" podría ser el culpable.

¿Tienes una clase llamada NotificationsMailer ? ¿Incluye Devise::Controllers::UrlHelpers allí resuelto su problema?

Tengo una nueva aplicación Rails 4.1.1 en la que estoy personalizando los correos electrónicos de Devise. Quiero que se muestren en la nueva función de vista previa del correo electrónico de Rails, así que hice lo siguiente:

1) Agregué el siguiente fragmento a mi archivo config/development.rb :

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

2) Creé mi correo electrónico de UserMailer Devise personalizado en 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) Cambió config/initializers/devise.rb para contener el siguiente fragmento de config/initializers/devise.rb :

config.mailer = ''UserMailer''

4) Agregó la clase UserMailerPreview a lib/mailer_previews con el siguiente contenido:

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

Hasta aquí todo bien. Parece que he hecho todo bien. Pero luego trato de ver la vista previa del email de confirmation_instructions en la ruta / carriles / correos / user_mailer / confirmation_instructions y me aparece el siguiente error:

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

el código para mi plantilla confirmation_url.html.erb ve así:

<%= 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>

¿Qué estoy haciendo mal? Supongo que es algo malo con la forma en que llamo al método confirmation_url . ¿Alguien puede ayudarme aquí?


Obtendrá un método indefinido para diseñar ayudantes de url cuando haya olvidado incluir los módulos de diseño necesarios en su modelo. por ejemplo, si su modelo es User y desea la confirmation_url , debe asegurarse de que el módulo :confirmable esté incluido:

devise <...snipped...>, :confirmable


Para aquellos que buscan previsualizar los correos electrónicos de Devise sin utilizar los anuncios publicitarios personalizados, (pero aún los correos electrónicos personalizados) esto es lo que hice (funciona en Rails> = 4.1):

  1. Configure su aplicación para la vista previa del correo electrónico.

  2. Configurar la clase Devise Mailer Preview

    # 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. Reiniciar el servidor


Usando Rails 5 y encontré la sintaxis ligeramente diferente de la excelente respuesta de @ steel, con el uso del doble "::" es la diferencia:

# 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