我已经在几个ActionMailer实例中反复调用了几个方法,并且我想将它们移动到一个模块中,以便我可以将它们作为一个组包含在内并干掉它们。
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
我收到错误undefined method
open_tracking&#39;对于SendgridSettings:Module`,因为它似乎是在模块上应用方法,而不是包含它的对象。
我在网上看到的大多数例子都是关于在模块中定义方法,然后在继承对象中使用它们。我想我正试图做相反的事情,并且还没有找到办法做到这一点。这样的事情有可能,甚至是个好主意吗?我并不习惯使用模块,它似乎是分离需要有时作为一个组调用的方法的自然方式。
答案 0 :(得分: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: Trying to extend Action Mailer with a module https://github.com/weppos/actionmailer_with_request/blob/master/lib/actionmailer_with_request.rb http://railsdispatch.com/posts/actionmailer