Underc0de

Programación Scripting => Ruby => Mensaje iniciado por: Alejandro_99 en Octubre 11, 2014, 02:01:34 AM

Título: Subir Imagenes a Rails con la gema Carrierwave
Publicado por: Alejandro_99 en Octubre 11, 2014, 02:01:34 AM
(http://upload.wikimedia.org/wikipedia/commons/1/16/Ruby_on_Rails-logo.png)

Para subir imágenes a Rails tenemos diversas gema pero las mas utilizadas para hacerlos son Paperclip y Carrierwave. En lo personal les recomiendo utilizar Carrierwave ya que la misma genera su propia clase y tenes un código mas limpio y ordenado. Pero eso queda a criterio de ustedes.

Comencemos...

1. Ingresamos a nuestro proyecto a través de la consola:
Código (ruby) [Seleccionar]
cd Nombre_del_proyecto
2. Agregamos nuestra gema al archivo Gemfile:

Código (ruby) [Seleccionar]
gem 'carrierwave'

2. Luego de haber agregado la gema al archivo Gemfile ejecutamos en la consola
Código (ruby) [Seleccionar]
bundle install

*Esto es para que la gema se instale en nuestro proyecto.

3. Un vez instalada la gema generamos nuestra clase que gestionara los archivos que subamos:

Código (ruby) [Seleccionar]
rails g uploader Foto

*Foto: hace referencia al nombre de nuestra clase le pueden colocar el nombre que quieran.

4. Abrimos app/models/alumno.rb y debajo de la línea:

Código (ruby) [Seleccionar]
class Alumno < ActiveRecord::Base

mount_uploader :imagen, FotoUploader


*:imagen = hace referencia al nombre de nuestro campo osea al que designamos para subir nuestras imágenes y/o archivos.
*FotoUploader: es el nombre de nuestra clase la que se genero cuando ejecutamos el comando:
Código (ruby) [Seleccionar]
rails g uploader Foto

5. Ingresamos a app/views/alumnos/_form.html.erb  y creamos nuestro view editando la siguiente línea:

Código (ruby) [Seleccionar]
<%= form_for @alumno do |f| %>

Para que quede la siguiente manera:

Código (ruby) [Seleccionar]
<%= form_for @alumno, :html => {:multipart => true} do |f| %>

6. Abrimos app/views/alumnos/_form.html.erb y cambiamos:

Código (ruby) [Seleccionar]
<%= f.text_field :imagen %>

Por la siguiente línea:

Código (ruby) [Seleccionar]
<%= f.file_field :imagen %>

7. Abrimos app/views/ alumnos /show.html.erb y cambiamos:

Código (ruby) [Seleccionar]
<%= @alumno.imagen %>

Por la siguiente línea:

Código (ruby) [Seleccionar]
<%= image_tag(@alumno.imagen_url, :width => 170, :height => 190) if @alumno.imagen.present? %>

*Nota: alumnos: hace referencia al nombre de mi tabla en ese lugar lo editan por el nombre que ustedes quieran asignarle
*Y otro dato muy relevante siempre absolutamente siempre el campo que designe para subir imágenes debe estar en minúscula (:imagen) ya que si lo ponen en mayúscula (:Imagen) les saldra el siguiente error:

uninitialized constant Imagen

8.   Ahora nos dirigimos al siguiente directorio: app/views/alumnos/index.html.erb una vez dentro del mismo editamos la siguiente línea osea en el lugar donde poseemos el campo que asignamos para subir imágenes:

Código (ruby) [Seleccionar]
<td><%= alumno.imagen %></td>

Y la reemplazamos por la subsiguiente línea:

Código (ruby) [Seleccionar]
<%= image_tag(alumno.imagen_url, :width => 65, :height => 75) if alumno.imagen.present? %>

La misma debe ir debajo de esta línea:

Código (ruby) [Seleccionar]
<% @alumnos.each do |alumno| %>
      <tr>


Y entre medio de las etiquetas
Código (html5) [Seleccionar]
<td></td>

Si siguieron los pasos mencionados anteriormente,  al guardar un registro se debería ver la imagen añadida en la tabla de la siguiente manera:

(http://imageshack.com/a/img661/6271/6Wrmh6.png)

Saludos¡¡