我有一个方法,它接受一个字符串数组并加入它们,所以他们做这样的事情:
>> my_arr
=> ["A", "B", "C"]
>> and_join(my_arr)
=> "A, B, and C"
我希望我的邮件程序可以访问,以便将一些信息输出到电子邮件中。我似乎无法找到一个好的地方把它放在application_helper.rb文件中,它在那里找不到它。它应该去哪里?
答案 0 :(得分:62)
使用邮件程序中的helper
方法定义要使用的帮助程序类
# mailer_helper.rb
module MailerHelper
def and_join(arr)
# whatever …
end
end
# my_mailer.rb
class MyMailer < ActionMailer::Base
helper MailerHelper
…
end
然后你也可以在视图中使用这些方法。
答案 1 :(得分:10)
值得查看rails提供的数组的to_sentence
扩展方法。
答案 2 :(得分:5)
一个已经回答的问题,但我没有从其他SO响应中获得修改的位置/文件。我是这样做的:
在app / config / initializers / devise.rb的底部,你可以添加:
Devise::Mailer.class_eval do
helper :application # includes "ApplicationHelper"
end
此示例将包含/app/helpers/application_helper.rb中的方法。您可以包含另一个帮助文件 - 例如,如果该方法仅用于邮件程序或仅用于另一个控制器。我需要的def全部使用,所以我放入该文件,以便所有视图都可以访问它。
答案 3 :(得分:4)
+1,工作正常,只是稍作修正:
您必须在帮助文件中使用模块而不是类:
# mailer_helper.rb
module MailerHelper
def and_join(arr)
# whatever …
end
end
答案 4 :(得分:1)
就我而言,对于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 :(得分:0)
如果您要在视图中使用某些一次性方法,则可以直接在邮件中使用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
将显示在您的视图中。