bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Расширение контроллера?

Здравствуйте. А не подскажите как правильно сделать, если я хочу контроллеру добавить методов, например отправка данных
1) заинклудить модуль Mailer
2) создать отдельный класс Mailer на основе ApplicationController и уже создавать подклассы
3) создать отдельный класс Mailer, и в контроллере создавать его экземпляры Mailer.new?
Или есть лучшее решение, спасибо?
  • Вопрос задан
  • 58 просмотров
Решения вопроса 2
AlexanderMint
@AlexanderMint
Web Developer
Может это вам поможет rusrails.ru/action-mailer-basics ?

Вообще я считаю что в контроллере должен быть только вызов "контейнера" (где происходят какие то вычисления, получения данных из базы, например trailblazer, dry решают эту проблему) и рендеринг полученного, т.е. буквально 3-4 строчки кода.

Вот пример из traiblazer:

class Song::Create < Trailblazer::Operation
  step    Model( Song, :new )
  step    :assign_current_user!
  step    Contract::Build( constant: MyContract )
  step    Contract::Validate()
  failure :log_error!
  step    Contract::Persist()

  def log_error!(options)
    # ..
  end

  def assign_current_user!(options)
    options["model"].created_by =
      options["current_user"]
  end
end
####
result = Song::Create.({ title: "The Feeling Is Alright" }, "current_user": current_user)
result.success? #=> true
Ответ написан
Комментировать
crmMaster
@crmMaster
Есть общепринятый способ для расширения функциональности контроллеров и моделей - это concern
elegantbrew.tumblr.com/post/70990048275/controller...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы