Rails 相同操作的不同 Devise Mailer 布局
Rails different Devise Mailer layout for the same action
我有一个具有多个引用的模型用户 "profiles"。一个用户可以拥有多个这样的配置文件,每个配置文件都应该在电子邮件中产生特定的布局。让我们考虑配置文件 Admin
和 Worker
例如,在我的 Devise 确认控制器中,我需要根据用户的配置文件使用不同的布局。例如,如果用户有
- 管理配置文件:呈现管理模板
- 工人配置文件:呈现工人模板
- 两者:呈现另一个模板(混合)
因此我无法为 Mailer/Controller 设置布局,但我需要在控制器操作中设置它。假设我有一个助手 layout_for_user() 可以 return 给定用户的布局名称。我将如何使用它?例如使用 Devise mailer ?
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
我不得不覆盖 devise_mail
方法
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
我有一个具有多个引用的模型用户 "profiles"。一个用户可以拥有多个这样的配置文件,每个配置文件都应该在电子邮件中产生特定的布局。让我们考虑配置文件 Admin
和 Worker
例如,在我的 Devise 确认控制器中,我需要根据用户的配置文件使用不同的布局。例如,如果用户有
- 管理配置文件:呈现管理模板
- 工人配置文件:呈现工人模板
- 两者:呈现另一个模板(混合)
因此我无法为 Mailer/Controller 设置布局,但我需要在控制器操作中设置它。假设我有一个助手 layout_for_user() 可以 return 给定用户的布局名称。我将如何使用它?例如使用 Devise mailer ?
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
我不得不覆盖 devise_mail
方法
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