Ruby on Rails — добавление фотографии в несохраненную модель

#ruby-on-rails #ruby

#ruby-на-рельсах #рубин #ruby-on-rails #ruby

Вопрос:

У меня есть полиморфная модель, которая хранит данные о фотографиях. Я использую эту модель для многих типов контента, например, фотографий пользователей (content_type: User, content_id: user_id), снимков экрана игр и т.д. До сих пор я использовал эту фотомодель только для уже существующего контента. Теперь мне нужно добавить несколько фотографий к определенной модели на этапе создания.

Проблема в том, что я не могу передать content_id в partial, потому что модель не имеет его перед сохранением.

Ниже, пожалуйста, найдите код, который работает для существующих моделей.

Код photos/add_photo частичного:

     <% form_for(@photo, :html => { :multipart => true }) do |f| %>
        <%= f.error_messages %>
        <%= f.hidden_field :attachable_id, :value => content.id %>
        <%= f.hidden_field :attachable_type, :value => content.class.name %>
        file inputs goes here...
        <%= f.submit "Upload" %>
    <% end %>
  

И вот как я передаю пример переменных в частичное представление в игре:

     <%= render :partial => 'photos/add_photo', :locals => { :content => @game } %>
  

Теперь я хочу, чтобы пользователи добавляли скриншоты во вновь созданный отчет. У меня есть контроллер:

     def new
      @raport = Raport.new
    end
  

Как я могу заставить модель зарезервировать или сгенерировать идентификатор? Может быть, мне следует найти другое решение и изменить весь код целиком?

Ответ №1:

Я бы использовал ajax для сохранения фотографии со случайным хэшем токена, а затем попросил ответ ajax обновить скрытое поле в форме нового объекта с этим хэшем токена. Затем, когда вы сохраняете новый объект, выполните обратный вызов, найдите фотографию по токену и обновите поля прикрепляемого идентификатора и типа.