dbw*_*ger 7 actionmailer ruby-on-rails-3
我可能错过了一些明显的东西,但我有一个徽标,我想要包含在我从我的应用程序发送的所有电子邮件中.我有一个主布局,我正在使用所有这些邮件.我假设有一种方法可以保持干燥,而不必在每个邮件程序方法中添加代码行来附加文件.有人能指出我正确的方向或纠正我的思路.
谢谢!
未来的Rails版本将支持使用before_filter和after_filter的回调:
http://github.com/rails/rails/commit/4f28c4fc9a51bbab76d5dcde033c47aa6711339b
由于它们将使用AbstractController :: Callbacks实现,因此您可以执行以下操作来模拟在Rails 4发布后将在ActionMailer :: Base中出现的功能:
class YourMailer < ActionMailer::Base
if self.included_modules.include?(AbstractController::Callbacks)
raise "You've already included AbstractController::Callbacks, remove this line."
else
include AbstractController::Callbacks
end
before_filter :add_inline_attachments!
private
def add_inline_attachments!
attachments.inline["footer.jpg"] = File.read('/path/to/filename.jpg')
end
end
Run Code Online (Sandbox Code Playgroud)
这包括将在未来的rails版本中使用的模块,因此可用的回调挂钩将是相同的,以确保将来的兼容性.当您尝试升级到已包含AbstractController :: Callbacks的Rails版本时,代码将引发,因此将提醒您删除条件逻辑.
在您的邮件程序使用的布局文件中,您可以添加以下内容
<%= image_tag('logo.png') %>
Run Code Online (Sandbox Code Playgroud)
我假设发送的邮件是 html 或多部分的。
您还需要更改环境文件。ActionMailer 没有获得默认的base_url。例如在environments/development.rb中我添加了以下内容
config.action_mailer.default_url_options = { :host => "localhost:3000" }
Run Code Online (Sandbox Code Playgroud)
如果你想以一种干巴巴的方式来做(并作为附件),也许你可以做类似的事情
class MyMailer < ActionMailer::Base
default :attachment => File.read(File.join(Rails.root,'public','images','logo.png'))
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2271 次 |
| 最近记录: |