【问题标题】:Where do I put helper methods for ActionMailer views?我在哪里放置 ActionMailer 视图的辅助方法?
【发布时间】:2011-04-10 13:03:24
【问题描述】:

我有一个方法,它接受一个字符串数组并将它们连接起来,这样它们就可以做这样的事情:

>> my_arr
=> ["A", "B", "C"]
>> and_join(my_arr)
=> "A, B, and C"

我希望我的邮件程序能够访问它,以便我可以将一些信息输出到电子邮件中。我似乎找不到放置它的好地方并将其放入 application_helper.rb 文件中,但在那里找不到它。应该去哪里?

【问题讨论】:

标签: ruby-on-rails actionmailer helpermethods


【解决方案1】:

在您的邮件程序中使用helper 方法来定义要使用的帮助程序类

# mailer_helper.rb
module MailerHelper
  def and_join(arr)
    # whatever …
  end
end

# my_mailer.rb
class MyMailer < ActionMailer::Base
  helper MailerHelper
  …
end

那么你也可以在视图中使用这些方法。

【讨论】:

  • 太棒了。除了任何下游视图之外,还将 include MailerHelper 添加到 MyMailer &lt; ActionMailer::Base 以使用 My Mailer 中的辅助方法(如主题格式化程序)
【解决方案2】:

值得研究一下 rails 提供的数组的 to_sentence 扩展方法。

【讨论】:

    【解决方案3】:

    一个已经回答的问题,但我没有从其他 SO 响应中获得要修改的位置/文件。这是我的做法:

    在 app/config/initializers/devise.rb 的底部可以添加:

    Devise::Mailer.class_eval do
      helper :application # includes "ApplicationHelper"
    end
    

    此示例将包含 /app/helpers/application_helper.rb 中的方法。您可以包含另一个帮助程序文件 - 例如,如果该方法仅用于邮件程序或仅用于另一个控制器。我需要的 def 被全部使用了,所以我把它放在那个文件中,这样所有视图都可以访问它。

    【讨论】:

      【解决方案4】:

      就我而言,对于 Rails 5.1,我必须同时使用 include 和 helper 方法,如下所示:

      include ApplicationHelper
      helper :application
      

      然后继续正常使用该方法。

      class MyMailer < ActionMailer::Base
        include ApplicationHelper
        helper :application
      
        def my_mailer_method
          my_helper_method_declared_in_application_helper
          ..
        end
      end
      

      【讨论】:

        【解决方案5】:

        如果您想在视图中使用一些一次性方法,可以直接在邮件中使用helper_method

        class MyMailer < ApplicationMailer
          def mailer
            mail to: '', subject: ''
          end
        
          private
        
          helper_method def something_to_use_in_the_view
          end
        end
        

        something_to_use_in_the_view 将显示在您的视图中。

        【讨论】:

          【解决方案6】:

          +1,工作正常,只是稍作修正:

          您必须在帮助文件中使用 module 而不是 class

          # mailer_helper.rb
          module MailerHelper
            def and_join(arr)
              # whatever …
            end
          end
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-16
            • 1970-01-01
            • 1970-01-01
            • 2014-06-21
            相关资源
            最近更新 更多