【问题标题】:I am getting a error when calling a mailer_helper method for a mailer method in a Rails 3.2.13 app在 Rails 3.2.13 应用程序中为 mailer 方法调用 mailer_helper 方法时出现错误
【发布时间】:2013-08-15 17:35:31
【问题描述】:

this postthis post 之后,我整理了以下内容。

在 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'

感谢您的帮助。

【问题讨论】:

  • 我想你想在你的 UserMailer 模型中使用include MailerHelper
  • @MrYoshiji,使用 include MailerHelper 会产生同样的错误。
  • 不不,试试include MailerHelper 和紧随其后的helper :mailer
  • 您可以使用Thread.current[:site] = site 在您的应用中存储“动态”数据。但这并不安全,有兴趣的可以看看;)

标签: ruby-on-rails ruby-on-rails-3.2 actionmailer


【解决方案1】:

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

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

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

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

Thread.current[:site] = site

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

【讨论】:

    【解决方案2】:

    我认为问题在于您试图将其定义为符号。尝试在您的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)
    

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

    【讨论】:

    • 我尝试了“helper MailerHelper”而不是“helper :mailer”,它产生了“NameError(#<0x007fc577918478>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2012-02-20
    • 2015-07-21
    • 1970-01-01
    相关资源
    最近更新 更多