26

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

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

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

4

6 回答 6

71

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

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

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

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

于 2010-09-10T01:05:47.757 回答
10

值得看看to_sentencerails 提供的数组的扩展方法。

于 2010-09-10T19:54:48.103 回答
5

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

在 app/config/initializers/devise.rb 的底部,您可以添加以下内容:

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

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

于 2013-08-08T10:42:35.197 回答
5

就我而言,对于 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
于 2017-10-19T13:52:33.597 回答
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将在您的视图中可用。

于 2019-01-24T17:32:59.710 回答
4

+1,工作正常,只是稍微更正:

您必须在帮助文件中使用模块而不是类:

# mailer_helper.rb
module MailerHelper
  def and_join(arr)
    # whatever …
  end
end
于 2011-07-21T08:26:27.680 回答