我有一种采用一系列字符串并加入它们的方法,因此他们做这样的事情:

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

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

有帮助吗?

解决方案

使用 helper 邮件中的方法定义用于使用的助手类

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

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

然后,您也可以在视图中使用这些方法。

其他提示

值得一看 to_sentence 铁轨提供的阵列的扩展方法。

一个已经回答的问题,但是我没有从其他SO回答中可以修改哪个文件/文件。这是我的做法:

在应用程序/config/initializers/deaise.rb的底部,您可以添加以下内容:

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

此示例将在/app/helpers/application_helper.rb中包含方法。您可以将另一个辅助文件包括在内 - 例如,如果该方法仅用于邮件或仅用于其他控制器。我需要的DEF已全面使用,因此我将其放入该文件中,以便所有视图都可以访问它。

+1,工作正常,只有一点更正:

你必须使用 模块 代替 班级 在助手文件中:

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

就我而言,对于Rails 5.1,我必须同时使用Inclace和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

如果您要在视图中使用某种关闭方法,则可以使用 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 您可以在您看来可用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top