Я внедряю новое приложение со следующим бизнес-процессом:
- Пользователь заполняет регистрационную форму.
- После сохранения регистрационной формы создается новая обучающая компания
- Пользователь получает электронное письмо с PDF-файлом с регистрационной формой и уникальным URL-адресом
- Пользователь использует уникальный URL-адрес для прикрепления подписанной регистрационной формы. Администратор может принять или отклонить
Каков наилучший подход к созданию Тренинговых Компаний?
Первое решение: новый сервис, который создает TrainingCompany
class TrainingCompanyService
def initialize(company_name)
@name = company_name
end
def create_new_training_company
TrainingCompany.new(company_name: @name).save
end
end
создать действие в RegistrationFormController:
def create
@registration_form = RegistrationForm.new(registration_form_params)
respond_to do |format|
if @registration_form.save
format.html { redirect_to @registration_form, notice: 'Registration form was successfully created.' }
TrainingCompanyService.new(@registration_form.company_name).create_new_training_company
RegistrationFormMailer.with(registration_form: @registration_form).after_registration_email.deliver_later
else
format.html { render :new }
end
end
end
Второе решение: новый метод внутри модели TrainingCompany:
class RegistrationForm < ApplicationRecord
belongs_to :training_company, optional: true
has_one_attached :registration_form
has_secure_token :signed_form_upload_token
def create_new_training_company
TrainingCompany.new(company_name: self.company_name, registration_form_id: self.id).save
end
end
создать действие в RegistrationFormController:
def create
@registration_form = RegistrationForm.new(registration_form_params)
respond_to do |format|
if @registration_form.save && @registration_form.create_new_training_company
format.html { redirect_to @registration_form, notice: 'Registration form was successfully created.' }
RegistrationFormMailer.with(registration_form: @registration_form).after_registration_email.deliver_later
else
format.html { render :new }
end
end
end
Какое решение вы бы выбрали и почему? Лично я предпочитаю второй (новый метод внутри модели) ...