2011-03-07 6 views

Respuesta

33

Sólo tiene que especificar en su programa de correo:

layout false 

También puede anexar :only => my_action (o :except) para limitar los métodos que aplica, así:

layout false, :only => 'email_method_no_layout' 

(applicable API documentation)

+0

Andrew, gracias pero quiero esto para un programa de correo, no para todos. ¿A dónde iría cuando tenga algo como def XXX mail (: to => ....) end – AnApprentice

+0

Ver respuesta actualizada. Siempre hay más detalles en la API. –

+5

desafortunadamente 'layout 'my_layout', excepto: 'action'' no funciona para mí. Tengo que usar 'mail ([...]) do | format | format.text {render layout: nil}} end' en la acción. –

2

El método de diseño puede aceptar el nombre de un método; use el método para determinar si mostrar un diseño y devolver ese nombre o falso.

layout :choose_layout 
... 

private 
def choose_layout 
    if something 
    return false 
    else 
    return 'application' 
    end 
end 
+0

¿Cómo puedo saber qué correo/método se va a ejecutar? –

0

También podría ser muy esquemática y hacer esto antes de la llamada de correo() al final de la acción anuncio publicitario específico en su lugar:

@_action_has_layout = false 
3

lo hice mediante el uso de una pequeña función, mirando el nombre de la acción y devolver el diseño de correo adecuado para ser utilizado:

class TransactionMailer < ApplicationMailer 

    layout :select_layout 

    def confirmation_email contact 
    #code 
    end 

    private 
    def select_layout 
    if action_name == 'confirmation_email' 
     false 
    else 
     'mailer' 
    end 
    end 
end 
Cuestiones relacionadas