Просмотр списков рассылки Rails в разделенном каталоге
У меня небольшая организаторская проблема, в моем приложении у меня есть 3 почтовых пользователя User_mailer, prduct_mailer, some_other_mailer и все они хранят свои представления в app/views/user_mailer...
Я хочу иметь подкаталог в /app/views/called mailers и помещать все в папки user_mailer, product_mailer и some_other_mailer.
Спасибо,
Ответы
Ответ 1
Я так согласен с этой стратегией организации!
И из примера Nobita я достиг этого:
class UserMailer < ActionMailer::Base
default :from => "[email protected]"
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, но не так уж плохо!
Ответ 2
Вы действительно должны создать класс ApplicationMailer
с вашими значениями по умолчанию и наследовать от этого в своих почтовых программах:
# app/mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
append_view_path Rails.root.join('app', 'views', 'mailers')
default from: "Whatever HQ <[email protected]>"
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
).
Ответ 3
Мне повезло с этим в версии 3.1
class UserMailer < ActionMailer::Base
...
append_view_path("#{Rails.root}/app/views/mailers")
...
end
Получите предупреждения об устаревании на template_root и RAILS_ROOT
Ответ 4
Если вам понадобится что-то действительно гибкое, наследование может помочь вам.
class ApplicationMailer < ActionMailer::Base
def self.inherited(subclass)
subclass.default template_path: "mailers/#{subclass.name.to_s.underscore}"
end
end
Ответ 5
Вы можете поместить шаблоны туда, где хотите, но вам нужно будет указать их в почтовом ящике. Что-то вроде этого:
class UserMailer < ActionMailer::Base
default :from => "[email protected]"
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 "Метки" для получения дополнительной информации.