Кеширование несущей не возобновляется

Когда я отправляю изображение через Carrierwave, и мне не хватает одного поля (т.е. название), тогда появится кэшированное изображение...

      <% if @post.avatar? %>
          <%= image_tag @post.avatar_url, :style => "width:300px"  %> 
          <%= f.hidden_field :avatar_cache %>
          <%= @post.avatar_url %>
      <% end %>

Однако поле: avatar_cache пусто. Когда я повторно передаю форму, ни одно из свойств изображения не перемещается вперед, поэтому мне нужно повторно выбрать изображение.

Проблема аналогична этому. CarrierWave не сохраняет загрузку после повторного отображения формы, но ответа не было.

Что происходит? Спасибо.

Ответ 1

Для меня проблема заключалась в том, что у меня был

accepts_nested_attributes_for :avatars, allow_destroy: true, reject_if: lambda { |avatar| avatar[:file].blank? }

Итак, я отклонил файл, потому что файла там не было

Важно отметить, что сам файл не сохраняется, а только кеш файл. Вот почему несущая волна docs предлагает:

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

Ответ 2

Проверьте, есть ли в вашей модели объявление attr_accessor для avatar_cache. Я добавил его случайно, а не attr_accessible (как упоминалось в их документах), и он переопределяет методы, созданные CarrierWave.

Ответ 3

Попробуйте ввести значение аватара_cache, чтобы при завершении проверки его предварительно заполнили в форме:

<%= f.hidden_field :avatar_cache, :value => @post.avatar_cache %>

Кажется, что это работает для меня, когда одна и та же форма перезагружается несколько раз (т.е. когда проверка не выполняется многократно). Я думаю, что они оставили это из документации.