我有一个小的组织问题,在我的应用程序中我有 3 个邮件程序 User_mailer、prduct_mailer、some_other_mailer 并且他们都将他们的视图存储在 app/views/user_mailer ...
我希望在 /app/views/ 中有一个名为 mailers 的子目录,并将所有内容放在 user_mailer、product_mailer 和 some_other_mailer 文件夹中。
谢谢,
我有一个小的组织问题,在我的应用程序中我有 3 个邮件程序 User_mailer、prduct_mailer、some_other_mailer 并且他们都将他们的视图存储在 app/views/user_mailer ...
我希望在 /app/views/ 中有一个名为 mailers 的子目录,并将所有内容放在 user_mailer、product_mailer 和 some_other_mailer 文件夹中。
谢谢,
你真的应该用你的默认值创建一个ApplicationMailer
类,并从你的邮件中继承:
# app/mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
append_view_path Rails.root.join('app', 'views', 'mailers')
default from: "Whatever HQ <hq@whatever.com>"
end
# app/mailers/user_mailer.rb
class UserMailer < ApplicationMailer
def say_hi(user)
# ...
end
end
# app/views/mailers/user_mailer/say_hi.html.erb
<b>Hi @user.name!</b>
这个可爱的模式使用与控制器相同的继承方案(例如ApplicationController < ActionController::Base
)。
我非常同意这个组织策略!
从大雄的例子中,我通过以下方式实现了它:
class UserMailer < ActionMailer::Base
default :from => "whatever@whatever.com"
default :template_path => '**your_path**'
def whatever_email(user)
@user = user
@url = "http://whatever.com"
mail(:to => user.email,
:subject => "Welcome to Whatever",
)
end
end
它是特定于 Mailer 的,但还不错!
我在 3.1 中有一些运气
class UserMailer < ActionMailer::Base
...
append_view_path("#{Rails.root}/app/views/mailers")
...
end
在 template_root 和 RAILS_ROOT 上收到弃用警告
如果你碰巧需要一些非常灵活的东西,继承可以帮助你。
class ApplicationMailer < ActionMailer::Base
def self.inherited(subclass)
subclass.default template_path: "mailers/#{subclass.name.to_s.underscore}"
end
end
您可以将模板放在任何您想要的位置,但您必须在邮件程序中指定它。像这样的东西:
class UserMailer < ActionMailer::Base
default :from => "whatever@whatever.com"
def whatever_email(user)
@user = user
@url = "http://whatever.com"
mail(:to => user.email,
:subject => "Welcome to Whatever",
:template_path => '**your_path**',
)
end
end
查看2.4 Mailer Views了解更多信息。
ApplicationMailer
class ApplicationMailer < ActionMailer::Base
layout 'mailer'
prepend_view_path "app/views/mailers" # <---- dump your views here
end