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