ruby-on-rails - type - upload files to heroku
Carga de archivo de Rails(clip) en ediciĆ³n (2)
Me hice una aplicación simple de blogs de Rails donde uso Paperclip para cargar archivos de imágenes. Incluso lo tengo conectado a un cubo S3, etc. ¿Spiffy verdad?
Pero no sé qué hacer al EDITAR / ACTUALIZAR una publicación. Tal como está ahora, todo lo que tengo es este campo en mi plantilla de formulario:
= f.file_field :image
Por lo tanto, diga en "publicar / 5 / editar" incluso si hay una imagen adjunta anteriormente, el campo muestra "No se seleccionó ningún archivo".
Peor aún, no hay una forma aparente de borrar la imagen actual si cambio de opinión y no quiero adjuntar una imagen.
¿Cómo puedo hacer esto un poco más fácil de usar y asegurarme de que la imagen actual (texto / url está bien) aparece como el valor en el campo de texto y / o el usuario puede cambiar la imagen actual a ninguna.
El método anterior no funcionó para mí con múltiples campos.
Estoy usando javascript para hacer esto, ya que también estoy usando Cocoon para agregar dinámicamente varias imágenes, en el formulario de edición estoy mostrando todas las imágenes con sus propios botones de eliminación. Luego cuento el número de objetos de imagen y oculto la misma cantidad de cuadros de carga de archivos de imagen. Actualmente lo tengo configurado para varios, pero con solo un pequeño cambio podría funcionar para su caso. Después de eliminarlos, se redirigen a donde, en su caso, el recuento sería 0 y mostraría el cuadro de carga.
Esta es la sección de formulario anidado.
<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>
Mi forma anidada
<div class="nested_fields">
<div class="col-md-3 picUploader">
<%= f.file_field :avatar %>
</div>
</div>
Mi javascript
$(document).ready(function () {
var count = $(''.pic'').length;
function hideElements(x) {
$(''.picUploader'').slice(0,x).hide();
}
hideElements(count);
})
Para Rails3 esto es lo que hago. Lo siento, no he usado Rails4 todavía.
Para mostrar al usuario si ya ha cargado un archivo, haga esto en su vista:
<% if @blog.image.exists? %>
<%= image_tag @blog.image.url(:thumb) %><br/>
<% end %>
<%= f.file_field :image %>
Luego, para permitir que el usuario elimine la carga actual, agregue esto a su vista (dentro de ese bloque if):
<%= f.check_box :delete_image %>Delete Image<br/>
Y manejas esa casilla de verificación en tu modelo:
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
De esa manera, si el usuario establece la casilla de verificación, borrará la imagen en la próxima operación de guardar.