Roadie + Devise,无法设计Devise电子邮件

时间:2015-03-27 00:08:17

标签: ruby-on-rails devise actionmailer

Rails 4.1.9,Ruby 2.2,Roadie 3.0.3,roadie-rails 1.0.4,设计3.4.1,SASS

我有一个共享布局,我用于设计邮件程序和非设计邮件程序。对于非设计邮件程序,我明确设置了roadie gem。 E.g:

class ReportMailer < ActionMailer::Base
  include Roadie::Rails::Automatic

  def send_report_email
    ...
    mail(to: @user.email, subject: subject) do |format|
      format.html { render layout: 'emails' }
    end
  end

  ...

  private
  def roadie_options
    super unless Rails.env.test?
  end
end

这是布局的主管:

<head>
  <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
  <meta name="viewport" content="width=device-width, initial scale=1.0">
  <%= stylesheet_link_tag('mailers/shared') %>
  <%= stylesheet_link_tag(yield :stylesheet_path) %>
</head>

对于我的自定义邮件程序,我提供了stylesheet_path,但不在我的设计视图中。但是,即使邮件程序/共享css文件已应用于自定义邮件程序,也不适用于设计邮件程序。

在我的application.rb中:

config.to_prepare do
  Devise::Mailer.layout 'emails'
end

我还设置了mailer_previews,虽然样式应用于custom_mailer的两个样式表,但没有样式应用于我的设计邮件程序视图。

我确实重启了我的服务器。我尝试按照here的说明操作。但我认为我在某处遗漏了某些东西。是否有一些额外的选项需要添加到设计控制器或做一些猴子修补以使其工作?有什么想法吗?

P.S。我想用roadie标记这个,但我没有足够的声誉。随意添加它。谢谢!

2 个答案:

答案 0 :(得分:4)

我最终写了一个初始化程序,猴子补丁Devise。您可以使用以下代码将devise_mailer_overrides.rb添加到config/initializers中,它似乎有效:

Devise::Mailer.class_eval do
  self.asset_host = nil
  include Roadie::Rails::Automatic

  private

  def roadie_options
    super unless Rails.env.test?
  end
end

答案 1 :(得分:1)

当不需要roadie_options时,可能就是这种情况:

config.to_prepare do
  Devise::Mailer.layout 'mailer'
  Devise::Mailer.send(:include, Roadie::Rails::Automatic)
end