Subir imagen al servidor

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… :slight_smile:

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.

Daniel,

Ola, eu estou aqui no Brasil, e também tive o mesmo problema que

está tendo, bom, depois de muita pesquisa e consulta a api do Rais (
http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for )
descobrimos que deve ser acrescentado o parametro “html { :multipart =>
true }”
como neste exemplo:

<% form_for( @foto, :html =>{ :multipart => true } ) do |f| %>

A forma como você usou o parametro, só funciona para a tag " form_tag "
como

no exemplo :

<% form_tag(‘/fotos/upload’, :method => post, :multipart => true) %>

Espero que te ajude a solucinar seu problema…

Onofre

Hola, estoy aquí en Brasil, y también tenía el mismo problema

está teniendo, así, después de mucha investigación y consulta api Rais
(http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for)
encontró que hay que añadir el parámetro “html {: multipart => true}”
como en este ejemplo:

<% form_for( @foto, :html => {:multipart => true} ) do |f| %>

La forma en que utilizó el parámetro, sólo funciona para el tag
“form_tag” como en este ejemplo:

<% form_tag(‘/fotos/upload’, :method => post, :multipart =>
true ) %>

Espero que le ayuda a solucinar el problema …

 Onofre

Gracias, con form_tag funciona correctamente.

Finalmente, he utilizado paperclip para subir y manejar los ficheros
adjuntos. Lo recomiendo.

Gracias de nuevo!