Layout Rails为相同的操作设计不同的邮件器布局

Layout Rails为相同的操作设计不同的邮件器布局,layout,devise,actionmailer,ruby-on-rails-5,Layout,Devise,Actionmailer,Ruby On Rails 5,我有一个模型用户,有多个引用的“配置文件”。一个用户可以有几个这样的配置文件,每个配置文件都应该在电子邮件中包含一个特定的布局。让我们考虑一下配置文件管理> 和工作人员 < /P> 例如,在我的Desive confirmation controller中,我需要根据用户的配置文件进行不同的布局。例如,如果用户 管理配置文件:呈现管理模板 工作人员配置文件:渲染工作人员模板 两者:渲染另一个模板(混合) 因此,我无法设置邮件器/控制器的布局,但我需要在控制器操作中设置它。假设我有一个help

我有一个模型用户,有多个引用的“配置文件”。一个用户可以有几个这样的配置文件,每个配置文件都应该在电子邮件中包含一个特定的布局。让我们考虑一下配置文件<代码>管理> <代码>和<代码>工作人员<代码> < /P> 例如,在我的Desive confirmation controller中,我需要根据用户的配置文件进行不同的布局。例如,如果用户

  • 管理配置文件:呈现管理模板
  • 工作人员配置文件:渲染工作人员模板
  • 两者:渲染另一个模板(混合)
因此,我无法设置邮件器/控制器的布局,但我需要在控制器操作中设置它。假设我有一个helper layout_for_user(),它可以返回给定用户的布局名称。我将如何使用它?例如,与设计邮件

class MyDeviseMailer < Devise::Mailer
    def confirmation_instructions(record, token, options={})
      # whange layout based on `layout_for_user(record)`
      @token = token
      devise_mail(record, :confirmation_instructions, opts)
    end
end
类MyDevisionEmailer
我不得不重写
设计邮件的方法

def confirmation_instructions
  ...
  @layout = find_layout_for_user(user)
  devise_mail(user, :confirmation_instructions, opts)
end

# Override to include custom layouts
def devise_mail(record, action, opts={})
  initialize_from_record(record)
  mail(headers_for(action, opts)) do |format|
    format.html { render layout: @layout }
  end
end