Подтвердить что ты не робот

Загрузка файлов Rails (paperclip) при редактировании

Я сделал себе простое приложение для блогов типа rails, в котором я использую Paperclip для загрузки файлов изображений. У меня все нормально работает и денди. Я даже подключил его к ведерке S3 и т.д. Spiffy правильно?

Но я не могу понять, что делать, когда РЕДАКТИРОВАТЬ/ОБНОВИТЬ сообщение. Как сейчас стоит, все, что у меня есть, это поле в моем шаблоне формы:

= f.file_field :image

Итак, скажем, "post/5/edit", даже если есть ранее прикрепленное изображение, в поле отображается "No file selected".

Хуже того, нет явного способа очистить текущий образ, если я передумаю и не хочу прикреплять изображение.

Как сделать это немного более удобным для пользователя и убедиться, что текущее изображение - текст /url в порядке - отображается как значение в текстовом поле и/или пользователь может изменить текущий образ на none.

4b9b3361

Ответ 1

Для Rails3 здесь то, что я делаю. К сожалению, я еще не использовал Rails4.

Чтобы отобразить пользователю, если они уже загрузили файл, сделайте это в своем представлении:

<% if @blog.image.exists? %>
  <%= image_tag @blog.image.url(:thumb) %><br/>
<% end %>
<%= f.file_field :image %>

Затем, чтобы позволить пользователю удалить текущую загрузку, добавьте это в свой вид (внутри этого блока):

<%= f.check_box :delete_image %>Delete Image<br/>

И вы обрабатываете этот флажок в своей модели:

  before_validation { image.clear if @delete_image }

  def delete_image
    @delete_image ||= false
  end

  def delete_image=(value)
    @delete_image  = !value.to_i.zero?
  end

Таким образом, если пользователь установит флажок, он очистит изображение при следующем сохранении.

Ответ 2

Этот метод не работал у меня с несколькими полями.

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

Это секция вложенных форм

<h3 class="text-muted">Upload Images</h3>
<% @rental.property_photos.each do |i| %>
    <div class="pic">
        <%= image_tag i.avatar.url(:thumb), class:"img-responsive property-images" %>
        <%= link_to i, method: :delete, data: { confirm: 'Are you sure?' } do %>
        <i class="fa fa-times-circle delete-pic"></i>
        <% end %>
    </div>
<% end %>
<fieldset id="property_photos">
    <%= f.fields_for :property_photos do |p| %>
    <%= render 'property_photo_fields', :f => p %>
    <% end %>
</fieldset>
<div class="links">
    <%= link_to_add_association 'Add Image', f, :property_photos, class:"fa fa-plus margin-bottom-20" %>
</div>

Моя вложенная форма

<div class="nested_fields">
    <div class="col-md-3 picUploader">
         <%= f.file_field :avatar %>
    </div>
</div>

Мой javascript

$(document).ready(function () {

     var count = $('.pic').length;

     function hideElements(x) {
         $('.picUploader').slice(0,x).hide();
     }

     hideElements(count);

})

с немного css ваши результаты тогда выглядят так... введите описание изображения здесь