Подтвердить что ты не робот

Просмотр списков рассылки Rails в разделенном каталоге

У меня небольшая организаторская проблема, в моем приложении у меня есть 3 почтовых пользователя User_mailer, prduct_mailer, some_other_mailer и все они хранят свои представления в app/views/user_mailer...

Я хочу иметь подкаталог в /app/views/called mailers и помещать все в папки user_mailer, product_mailer и some_other_mailer.

Спасибо,

4b9b3361

Ответ 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 "Метки" для получения дополнительной информации.