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

問題は、それをシンボルとして定義しようとしていることだと思います。以下のようにクラスのように呼び出してみてください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

しかし、このソリューションの問題は、ヘルパーが結果を知ることができないことですcurrent_site(ユーザーのセッションにストックされていると思いますか?)。

回避策は、データを動的に保存するために使用するThread.currentことです (更新可能):

Thread.current[:site] = site

このソリューションはそれほど安全ではありません。この変数へのアクセスを保護し、ユーザーの入力を .xml ファイルに入れないようにしてThread.currentください。

于 2013-08-16T13:27:53.550 に答える