Hola, estoy empezando a crear una web con ruby on rails y me encuentro
bloqueado.
Tengo una tabla “perros” y otra tabla llamada “fotos” donde guardo las
rutas de las imagenes que quiero subir a “/public/images” y el id del
perro al que pertenecen (1 perro tiene N fotos).
Consigo crear registros de “fotos” con el id del perro y un string con
la foto, del tipo “C:\foto1.jpg”, pero me es imposible subirlo al
servidor a la carpeta /public/images
He seguido varios manuales pero no lo consigo y (en principio)
preferiria no utilizar plugins.
La idea seria que al crear una foto, esta se cargase en el servidor.
Utilizo la version 2.3.8 y el error que me da (aunque no creo que sea el
unico problema…) es: NoMethodError (undefined method `read’ for
“foto1.jpg”:String):
He probado todo lo que se me ha ocurrido y tal vez haya alguna “burrada”
en el codigo, no me lo tengan en cuenta…
El codigo que tengo en la vista es:
Nueva foto
<% form_for(@foto, :multipart => true) do |f| %> <%= f.error_messages %>Seleccionar imagen: <%= f.file_field 'url'%>
<%= f.label :perro_id %>
<%=f.collection_select :perro_id,Perro.all,:id,:nombre%>
<%= f.submit 'Create' %>
<% end %> <%= link_to 'Back', fotos_path %>Controlador:
def create
@foto = Foto.new(params[:foto])
respond_to do |format|
if @foto.save
post = Foto.subir(params[:upload])
format.html { redirect_to(@foto, :notice => ‘Foto was
successfully created.’) }
format.xml { render :xml => @foto, :status => :created,
:location => @foto }
else
format.html { render :action => “new” }
format.xml { render :xml => @foto.errors, :status =>
:unprocessable_entity }
end
end
end
Modelo
class Foto < ActiveRecord::Base
belongs_to :perro
def self.subir(upload)
directory = “public/images/”
path = File.join(directory, “prueba”)
File.open(path, “wb”) { |f| f.write(upload[‘datafile’].read)}
render :text => “Fichero cargado con exito”
end
end
Gracias de antemano
PD: si pudieran recomendarme algun libro o curso se lo agradeceria
mucho.