【发布时间】:2011-07-10 00:59:32
【问题描述】:
我有一个带有布局的 user_mailer。
对于我的 actionmailer 方法之一,我希望邮件程序不使用默认布局。但我看不到找到无布局的设置。
有什么想法吗?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 actionmailer
我有一个带有布局的 user_mailer。
对于我的 actionmailer 方法之一,我希望邮件程序不使用默认布局。但我看不到找到无布局的设置。
有什么想法吗?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 actionmailer
我使用了一个小函数,查看操作名称并返回要使用的正确邮件布局:
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
【讨论】:
只需在邮件中指定:
layout false
您还可以附加:only => my_action(或:except)来限制它适用的方法,如下所示:
layout false, :only => 'email_method_no_layout'
【讨论】:
layout 'my_layout', except: 'action' 对我不起作用。我必须在操作中使用mail([…]) do |format| format.text {render layout: nil}} end。
您也可以非常粗略地在特定邮件操作结束时调用 mail() 之前执行此操作:
@_action_has_layout = false
【讨论】:
布局方法可以接受方法名;使用该方法确定是否显示布局并返回该名称或 false。
layout :choose_layout
...
private
def choose_layout
if something
return false
else
return 'application'
end
end
【讨论】: