Ruby on rails 我在Rails 3.2.13应用程序中为mailer方法调用mailer\u helper方法时出错

Ruby on rails 我在Rails 3.2.13应用程序中为mailer方法调用mailer\u helper方法时出错,ruby-on-rails,ruby-on-rails-3.2,actionmailer,Ruby On Rails,Ruby On Rails 3.2,Actionmailer,下面,我把下面的内容放在一起 在app/helpers/mailer_helper.rb中: module MailerHelper def sys_addy @sys_addy = current_site == "site1" ? "me@site1.com" : "me@site2.com" end end 尝试1将helper方法调用置于方法之上-app/mailers/user_mailer.rb: class UserMailer < ActionMailer

下面,我把下面的内容放在一起

在app/helpers/mailer_helper.rb中:

module MailerHelper
  def sys_addy
    @sys_addy = current_site == "site1" ? "me@site1.com" : "me@site2.com"
  end
end
尝试1将helper方法调用置于方法之上-app/mailers/user_mailer.rb:

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

  def notice_email
    ...
  end
end
class UserMailer < ActionMailer::Base
  helper :mailer

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

谢谢您的帮助。

我认为问题在于您试图将其定义为一个符号。尝试在用户邮件程序中像下面这样调用它:

这样,您也可以在视图中访问此方法。
希望有帮助。谢谢。我想你可以使用以下工具:

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

此解决方案没有那么安全,请确保访问此变量的安全性,并且永远不要将用户的输入放在Thread.current中。

我认为您希望在UserMailer中使用include MailerHelpermodel@MrYoshiji,使用include MailerHelper会产生相同的错误。请检查:否,只需使用include-MailerHelper和right-after-it-helper:mailery就可以使用Thread.current[:site]=站点来存储应用程序中的动态数据。但它并不真正安全,如果你感兴趣的话,可以看看它;我尝试了helper-MailerHelper而不是helper:mailer,它生成了NameError未定义的局部变量或方法'sys\u addy'。谢谢你的建议。你的答案是Yoshiji先生在评论中给我的解决方案的总结,这让我更进一步。公平地说,如果他在接下来的几天内把他的答案变成一个答案,我会选择他的答案作为答案。如果我没有他的消息,我会选择你的。我对你的每一个回答都投了赞成票。谢谢你的帮助。
class UserMailer < ActionMailer::Base
   include MailerHelper
   helper :mailer       

  def notice_email
    sys_addy
    ...
    mail( ...:from => @sys_addy )
  end
end
add_template_helper(MailerHelper)
class UserMailer < ActionMailer::Base
  include MailerHelper
  helper :mailer
Thread.current[:site] = site