【问题标题】:Rails for ActionMailer - How to disable a Layout for a certain mailerRails for ActionMailer - 如何禁用某个邮件程序的布局
【发布时间】:2011-07-10 00:59:32
【问题描述】:

我有一个带有布局的 user_mailer。

对于我的 actionmailer 方法之一,我希望邮件程序不使用默认布局。但我看不到找到无布局的设置。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    我使用了一个小函数,查看操作名称并返回要使用的正确邮件布局:

    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
    

    【讨论】:

      【解决方案2】:

      只需在邮件中指定:

      layout false
      

      您还可以附加:only =&gt; my_action(或:except)来限制它适用的方法,如下所示:

      layout false, :only => 'email_method_no_layout'
      

      (applicable API documentation)

      【讨论】:

      • 安德鲁,谢谢,但我想要一个邮件,而不是全部。当我有类似 def XXX mail(:to => ....) end
      • 查看更新的答案。 API 中总是有更多细节。
      • 不幸的是layout 'my_layout', except: 'action' 对我不起作用。我必须在操作中使用mail([…]) do |format| format.text {render layout: nil}} end
      【解决方案3】:

      您也可以非常粗略地在特定邮件操作结束时调用 mail() 之前执行此操作:

      @_action_has_layout = false
      

      【讨论】:

        【解决方案4】:

        布局方法可以接受方法名;使用该方法确定是否显示布局并返回该名称或 false。

        layout :choose_layout
        ...
        
        private
        def choose_layout
          if something
            return false
          else
            return 'application'
          end
        end
        

        【讨论】:

        • 我如何知道要执行的邮件/方法?
        猜你喜欢
        • 2016-05-17
        • 1970-01-01
        • 2012-12-13
        • 2015-04-22
        • 2013-02-12
        • 1970-01-01
        • 1970-01-01
        • 2014-01-15
        • 2022-01-17
        相关资源
        最近更新 更多