Rails уничтожает загрузку в ассоциации has_one

У меня есть организационная модель с ассоциацией has_one :uploads, as: :uploadable

Это полиморфное отношение к

class Upload < ApplicationRecord
  include Uploaders::StandardUploader::Attachment.new(:file)
  belongs_to :uploadable, polymorphic: true, touch: true, optional: true
end

Все отлично работает с точки зрения создания записи, но когда я редактирую:

  = form.fields_for :upload, organization.upload do |form_upload|
    = form_upload.label :file
    = form_upload.file_field :file
      span Choose file...

Контроллер вызывает build_upload в методе редактирования, который создает новую ассоциацию и фактически уничтожает существующую.

Если я не позвоню build_upload, поля загрузки формы пустые.

Я в недоумении, что происходит... что я могу сделать, чтобы предотвратить разрушение на has_one Таким образом, существующая загрузка не потеряна?

Что я должен сделать, чтобы форма заполнила существующую загрузку?

2 ответа

Вы должны включить вложенные атрибуты, чтобы разрешить обновление связанных записей через родительский:

class UploadableModel < ApplicationRecord
  # ...
  accept_nested_attributes_for :upload
end

fields_for должен автоматически генерировать поля формы в формате вложенных атрибутов, который ожидает ActiveRecord. Смотрите примеры в fields_for Документация по API ниже.

Попробуйте установить ассоциацию как

has_one :uploads, as: :uploadable, autosave: false
Другие вопросы по тегам