1

いくつかのActionMailerインスタンスで繰り返し呼び出すメソッドがいくつかあります。それらをモジュールに移動して、グループとして含めてDRYを実行できるようにします。

module SendgridSettings
 open_tracking true
 add_filter_setting("subscriptiontrack", "enable", 1)
 add_filter_setting("subscriptiontrack","replace","{{ unsubscribe_url }}")
 uniq_args({'id' => email.id, 'organization_id' => organization.id})
 substitute '{{ person.first_name }}', recipients
 set_credentials(organization)
end

関連するメーラーコードは次のとおりです。

class NewChargeMailer < ActionMailer::Base
  def charge_email(recipient, transaction, organization)
  include SendgridSettings

SendgridSettings:Module`のエラーundefined methodopen_tracking'が発生します。これは、モジュールを含むオブジェクトではなく、モジュールにメソッドを適用しているように見えるためです。

私がオンラインで見ている例のほとんどは、モジュールでメソッドを定義し、継承オブジェクトでそれらを使用することに関するものです。私は反対のことをしようとしていると思いますが、それを行う方法を見つけることができませんでした。そのようなことは可能ですか、それとも良い考えですか?私はモジュールを使用することに慣れていません。それは、グループとして時々呼び出される必要があるメソッドを分離するための自然な方法のように思えました。

4

1 に答える 1

2

あなたはこのようなことをする必要があるかもしれません:

module SendgridSettings

  def self.included(base)
    base.class_eval do
      before_filter :default_settings
    end
  end

  def default_settings
    #write your code here
  end

end

このコードがモジュール内でも機能する可能性もあります。

::ActionMailer::Base.register_interceptor(self)

コントローラーのようにActionMailerを使用することもできます。

module ActionMailer
  class Base < AbstractController::Base
    #...
  end
end

出典: Rails 3:モジュールを使用してActionMailerを拡張しようとしてい ますhttps://github.com/weppos/actionmailer_with_request/blob/master/lib/actionmailer_with_request.rbhttp://railsdispatch.com/posts/actionmailer

于 2012-12-03T00:30:38.127 に答える