0

这篇文章这篇文章之后,我整理了以下内容。

在 app/helpers/mailer_helper.rb 中:

module MailerHelper
  def sys_addy
    @sys_addy = current_site == "site1" ? "me@site1.com" : "me@site2.com"
  end
end

尝试 1 将辅助方法调用置于方法之上 - app/mailers/user_mailer.rb:

class UserMailer < ActionMailer::Base
  helper :mailer
  sys_addy
  default :from => @sys_addy

  def notice_email
    ...
  end
end

尝试 2 将辅助方法调用放在方法内 - app/mailers/user_mailer.rb:

class UserMailer < ActionMailer::Base
  helper :mailer

  def notice_email
    sys_addy
    ...
    mail( ...:from => @sys_addy )
  end
end

在这两种情况下,我得到:

NameError (undefined local variable or method `sys_addy'

谢谢你的帮助。

4

2 回答 2

1

我认为问题在于您试图将其定义为符号。尝试在您的以下类似 Class 中调用它User Mailer

class UserMailer < ActionMailer::Base
   include MailerHelper
   helper :mailer       

  def notice_email
    sys_addy
    ...
    mail( ...:from => @sys_addy )
  end
end

更新:同时使用(包括和助手)或尝试以下:

add_template_helper(MailerHelper)

这样,您也可以在视图中访问此方法。希望,它会有所帮助。谢谢

于 2013-08-15T18:24:21.507 回答
1

我认为您可以使用以下内容:

class UserMailer < ActionMailer::Base
  include MailerHelper
  helper :mailer

但是这个解决方案的问题是 Helper 无法知道结果current_site(我猜它存储在用户会话中?)。

一种解决方法是Thread.current为了动态存储数据(可以更新):

Thread.current[:site] = site

此解决方案不是那么安全,请确保确保对该变量的访问安全,并且永远不要将用户的输入放入Thread.current.

于 2013-08-16T13:27:53.550 回答