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:
<h1>Nueva foto </h1>
<% form_for(@foto, :multipart => true) do |f| %>
<%= f.error_messages %>
<p> <label for="upload_file"> Seleccionar imagen:</label>
<%= f.file_field 'url'%>
</p>
<p>
<%= f.label :perro_id %><br />
<%=f.collection_select :perro_id,Perro.all,:id,:nombre%>
</p>
<p>
<%= f.submit 'Create' %>
</p>
<% 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.
on 2010-12-09 13:53
on 2010-12-31 19:14
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/FormHe... ) 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
on 2010-12-31 19:15
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/FormHe...) 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
on 2011-01-03 16:22
Gracias, con form_tag funciona correctamente. Finalmente, he utilizado paperclip para subir y manejar los ficheros adjuntos. Lo recomiendo. Gracias de nuevo!
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.