【问题标题】:template not picked up correctly for mailers没有为邮寄者正确选择模板
【发布时间】:2015-01-14 09:47:11
【问题描述】:

我在一个模块中定义了两个邮件类,如下所示:

1. app/mailers/my_mailers/mailer_a.rb

module MyMailers
  class MailerA < BaseMailer
    def main
       mail(:to => 'xyz@abc.com', :subject => 'Mail Subject')
    end
  end
end

2。 app/mailers/my_mailers/mailer_b.rb

module MyMailers
  class MailerB < MailerA
    def some_method
    end
  end
end

和所有邮件程序的基类:app/mailers/base_mailer.rb

class BaseMailer < ActionMailer::Base
    ...
    ...
end

现在这些邮件的模板和部分存储在(带有一些 html 代码):

ma​​iler_a 模板

app/views/my_mailers/mailer_a/main.html.erb app/views/my_mailers/mailer_a/_header.html.erb app/views/my_mailers/mailer_a/_body.html.erb app/views/my_mailers/mailer_a/_footer.html.erb

ma​​iler_b 模板

/app/views/my_mailers/mailer_b/some_random_templ.html.erb

app/views/my_mailers/mailer_a/main.html.erb的示例内容

<% render partial: 'header' %>
<% render partial: 'body' %>
<% render partial: 'footer' %>

问题: 当我尝试调用 MailerB 的 main() 方法时,它应该调用 MailerA 的 main() 方法(因为 MailerB 类没有可用的 main 方法),然后尝试通过搜索 @ 通过 mail() 方法调用发送邮件app/views/my_modules/mailer_b 目录中的 987654331@ 模板。但是mailer_bviews 没有任何main 模板,所以它应该回退到父类视图mailer_aviews 目录并开始渲染main.html.erb

但在我的情况下,收到的邮件总是空的,就好像没有找到模板一样,我认为搜索模板仅在 app/views/mailer_b/ 目录停止,并且不会在邮件继承中进一步上升。

我也尝试过使用 :template_path 机制,但结果还是一样(空邮件)

谁能为这种情况提出一些修复/解决方案?请让我知道我是否应该提供更多详细信息。

使用 Rails 版本:3.2.1x

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 templates


    【解决方案1】:

    为什么你为你的邮件使用了一个模块。你的代码很好,我看不出你的模板没有相应加载的任何原因。尝试删除模块,然后像这样使用类: -

    class MailerA < BaseMailer
      default from: "support@mydomain.com"
      ##if needed
      ##layout 'mailer_a'
    
    
      def registration_confirmation(user_email)
         //do your stuff with user_email
         mail(:to => user_email, :subject =>"Good to see you")
        ##in case multiple templates in same folder
        ## mail(:to => user_email, :subject =>"Good to see you", :template_name => "main_2")
      end
    
    end##class ends
    

    【讨论】:

    • mailer_amailer_b 模板出于某些特定目的被归类为邮件程序,因此我将它们归类为 my_mailers 模块,任何新的类似邮件程序例如:mailer_c 将属于同一模块。
    • 我也按照建议尝试删除模块my_modules,但仍然没有选择合适的模板。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    相关资源
    最近更新 更多