Может это вам поможет
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