我在哪里为ActionMailer视图添加帮助方法?

aar*_*ona 23 ruby-on-rails actionmailer helpermethods

我有一个方法,它接受一个字符串数组并加入它们,所以他们做这样的事情:

>> my_arr
=> ["A", "B", "C"]
>> and_join(my_arr)
=> "A, B, and C"
Run Code Online (Sandbox Code Playgroud)

我希望我的邮件程序可以访问,以便我可以将一些信息输出到电子邮件中.我似乎无法找到一个好的地方把它放在application_helper.rb文件中,它在那里找不到它.它应该去哪里?

edg*_*ner 67

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

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

# my_mailer.rb
class MyMailer < ActionMailer::Base
  helper MailerHelper
  …
end
Run Code Online (Sandbox Code Playgroud)

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

  • 大.除了任何下游视图之外,还要将`include MailerHelper`添加到`MyMailer <ActionMailer :: Base`以使用`My Mailer`中的辅助方法(如主题格式化程序) (4认同)

Sha*_*ell 10

值得一看的to_sentence是rails提供的数组的扩展方法.


Jos*_*phK 5

一个已经回答的问题,但我没有得到其他SO响应修改的位置/文件.我是这样做的:

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

Devise::Mailer.class_eval do
  helper :application # includes "ApplicationHelper"
end
Run Code Online (Sandbox Code Playgroud)

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


Gui*_*jon 5

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

include ApplicationHelper
helper :application
Run Code Online (Sandbox Code Playgroud)

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

class MyMailer < ActionMailer::Base
  include ApplicationHelper
  helper :application

  def my_mailer_method
    my_helper_method_declared_in_application_helper
    ..
  end
end
Run Code Online (Sandbox Code Playgroud)


aka*_*ick 5

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

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

  private

  helper_method def something_to_use_in_the_view
  end
end
Run Code Online (Sandbox Code Playgroud)

something_to_use_in_the_view将在您的视图中可用。