@Sworg

Как сделать form object для обновления записи, а не только для создания?

Существуюет form object для создания записи и нужных ассоциаций. Как грамотно расширить класс, чтобы он обеспечивал корректное обновление данных, а не только создание?
module Company
  class JobForm
    include ActiveModel::Model

    attr_accessor :title, :body, :city, :start_date, :attachments, 
                          :requirements, :company
    attr_reader :object

    validates :title, :body, :start_date, :city, presence: true

    def save
      persist! if valid?
    end

    private

    def persist!
      ActiveRecord::Base.transaction do
        save_job
        save_attachments
        save_requirements
      end
      object
    end

    def save_job
      @object = company.jobs.create( 
          # attributes.. ..)
    end

    def save_attachments
      return unless attachments&.present?
      attachments.each do |attacment_attributes|
        object.attachments.create(attacment_attributes)
      end
    end

    def save_requirements
      return unless requirements&.present?
      object.requirements.destroy_all
      requirements.each do |requirement_attributes|
        object.requirements.create(requirement_attributes)
      end
    end
  end
end
  • Вопрос задан
  • 177 просмотров
Решения вопроса 1
@unabl4
ruby on rails web dev
А обновлять как? Какие именно сущности должны быть обновляемы?
Кстати, у вас неправильно заимплементирована транзакционность - метод "create" (без восклицательного знака) не кидает exception, и поэтому транзакция не откатится назад при ошибке.
А так же амперсанд для безопасной навигации не нужен при проверке requirements на существование.
attr_accessor тоже уже померли вроде :D
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы