Update


#1

Hola de nuevo.
Tengo una tabla repos que contiene archivos, su nombre, el tipo.
en modelo tengo lo siguiente:

    def file_info=(input_data)

if input_data.blank?
errors.add(‘Debe seleccionar una imagen’ ) if input_data.blank?
else
self.nombre = input_data.original_filename
self.content_type = input_data.content_type.chomp
self.archivo = input_data.read
end
end

…yo selecciono el desde un file_field en la vista y al crearlo extrae
el nombre y el tipo de datos llenandolos en la tabla.

Bueno en el create no tengo ningun problema, pero a la hora de
actualizar, simplemente no funciona.Es decir, no obtiene el nombre del
archivo ni el tipo de datos, lo cual provoca que corrompa el archivo que
ya está almacenado.

Tengo esto en el controller (lo generé con scaffold):

def update
@repo = Repo.find(params[:id])
respond_to do |format|
if @repo.update_attributes(params[:repo])
flash[:notice] = ‘El archivo fue editado exito.’
format.html { redirect_to(@repo) }
format.xml { head :ok }
else
format.html { render :action => “edit” }
format.xml { render :xml => @repo.errors, :status =>
:unprocessable_entity }
end
end
end

…he probado todo lo que se me ha ocurrido pero no me sale.
He leído un monton pero no logro comprender bien todo esto.

Gracias de antemano.

Saludos!!


#2

¿Cómo tienes la vista edit.htm.erb de ese controlador?

El 30 de enero de 2009 19:45, Romina C. <
removed_email_address@domain.invalid> escribió:


#3

Mira en la consola cuales son los params que te llegan a la aplicación.
¿tienes puesto multipart en el formulario de update?

Un Saludo.


Guillermo Álvarez Fernández
removed_email_address@domain.invalid
http://cientifico.net


#4

Andrés Gutiérrez wrote:

¿Cómo tienes la vista edit.htm.erb de ese controlador?

Editar archivo

<% form_for(@repo) do |f| %>
<%= f.error_messages %>

<%= f.label :Archivo %>
<%= f.file_field :archivo %>

<%= f.submit "Guardar" %>

<% end %>

<%= link_to ‘Ver’, @repo %> |
<%= link_to ‘Volver’, repos_path %>

ahi es donde cambio el archivo

gracias por responder
saludos


#5

Guillermo Álvarez Fernández wrote:

Mira en la consola cuales son los params que te llegan a la aplicación.
¿tienes puesto multipart en el formulario de update?

ya probé con y sin multipart
Saludos


#6

ya probé con y sin multipart
¿¿Así???

<% form_for :repo, :url => {:action => ‘update’}, :html =>{:multipart
=> true}) do |f| %>

¿Ahora usas algún plugin (paperclip, attachment_fu,…)?

El 30 de enero de 2009 20:09, Romina C. <
removed_email_address@domain.invalid> escribió:


#7

Andrés Gutiérrez wrote:

ya probé con y sin multipart
¿¿Así???

<% form_for :repo, :url => {:action => ‘update’}, :html =>{:multipart
=> true}) do |f| %>

¿Ahora usas algún plugin (paperclip, attachment_fu,…)?

lo tengo asi

<% form_for(@repo , :url => {:action=>‘update’}, :html=>
{:multipart=>true}) do |f| %>

y nop,no estoy usando ningun plugin

saludos


#8

Mirate Paperclip, en la documentación está todo lo que necesitas para
adjuntar archivos a tus modelos de datos.

On 30/01/2009, at 20:24, Romina C.
<removed_email_address@domain.invalid


#9

Haz caso a Francesc, de verdad este mismo hilo, con los mismos
protagonistas
y Francesc recomnedandote lo mismo lo tuvimos ayer. En serio creo que el
esfuerzo de hacerte con el plugin, luego se vera recomendado con creces.
Yo
no lo he usado, pero en cuanto necesite el tema de adjuntar archivos,
será
mi elección

Un saludo

2009/1/30 Francesc E. removed_email_address@domain.invalid


#10

¿tienes puesto multipart en el formulario de update?
Me parece que tienes que poner lo que dice Guillermo

El 30 de enero de 2009 20:03, Romina C. <
removed_email_address@domain.invalid> escribió:


#11

Andrés Gutiérrez wrote:

Haz caso a Francesc, de verdad este mismo hilo, con los mismos
protagonistas
y Francesc recomnedandote lo mismo lo tuvimos ayer. En serio creo que el
esfuerzo de hacerte con el plugin, luego se vera recomendado con creces.
Yo
no lo he usado, pero en cuanto necesite el tema de adjuntar archivos,
será
mi elección

Un saludo

por favor corrijanme si estoy equivocada, he estado leyendo bastante la
documentacion del plugin que me recomendaron, y por lo que leí no me
sirve, ya que en la BD va almacenando la ruta y no el archivo en sí.

Si este fuera el caso no me sirve para nada, por motivos de la empresa
se me exige que queden almacenados en la BD y no que guarde solo una
ruta.

Si no es asi lo usaré encantada, no es que me guste complicarme la
existencia ni nada.

Gracias por su ayuda y recomendaciones.

Saludos


#12

por favor corrijanme si estoy equivocada, he estado leyendo bastante la
documentacion del plugin que me recomendaron, y por lo que leí no me
sirve, ya que en la BD va almacenando la ruta y no el archivo en sí.

Alguien que conozca Paperclip ¿Francesc …?

El 2 de febrero de 2009 13:38, Romina C. <
removed_email_address@domain.invalid> escribió:


#13

Me precipité al decirlo, ya que ahora mirando el código de la rama
oficial veo que no se puede.

…bueno, muchisimas gracias por la aclaracion, ya estaba pensando que
leía otra cosa o no sé qué.

Igualmente seria interesante que utilizaras Paperclip y que hicieras
el módulo de storage en la base de datos, que siempre puede ser útil
para otras personas y de paso colaboras en el proyecto. :wink:

de hecho, tengo la intención de usarlo pero para otra aplicación que
tengo en mente, pero será cuando tenga más tiempo, lamentablemente ahora
no lo tengo porque necesito avanzar con lo que tengo ahora.

Volviendo a mi problema inicial (sé que es una molestia, lo siento!!!),
pero me di cuenta que de hecho al hacer el update sí realiza el metodo
que está en el modelo donde se obtiene el nombre y el tipo de archivo.

El problema es que estos datos actualizados no son enviados de vuelta al
metodo update.

Saludos!


#14

2009/2/2 Andrés gutiérrez removed_email_address@domain.invalid:

Alguien que conozca Paperclip ¿Francesc …?

El dia 29 de Enero dije:

Con Paperclip puedes guardar los archivos en la base de datos. Y es
bastante facil usarlo.

Me precipité al decirlo, ya que ahora mirando el código de la rama
oficial veo que no se puede.

module Storage
  module Paperclip
    module Filesystem
    ...
    end
    module S3
    ...
    end
  end
end

El tema es que no se donde miré pero diria que habia un módulo DB.

Siento mucho la confusión.

Igualmente seria interesante que utilizaras Paperclip y que hicieras
el módulo de storage en la base de datos, que siempre puede ser útil
para otras personas y de paso colaboras en el proyecto. :wink:


#15

Con Paperclip puedes guardar los archivos en la base de datos. Y es
bastante facil usarlo.

aquí tienes información y algunos links (alguno desactualizado) para
subir ficheros en rails

http://wiki.rubyonrails.org/rails/pages/HowtoUploadFiles

Y aquí uno de los plugins de referencia para subida de ficheros que sí
soporta almacenar en la DB, aunque nunca lo he usado para eso, sino
usando el filesystem

http://github.com/technoweenie/attachment_fu/tree/master

Si el plugin no te da lo que quieres, con el código de la primera página
puedes ver que recibir un fichero desde un formulario es fácil. Y una
vez lo tienes, almacenarlo en la DB es exactamente igual a guardar el
nombre de un usuario, por ejemplo. Si asignas el valor a un campo y le
das a guardar, lo guardas.

Como cualquier otro campo, sólo que con un problema serio de rendimiento
si lo lees cada vez (por eso en attachment fu usan dos tablas, una sólo
con el contenido, para usarla solamente cuando realmente quieres leer el
contenido binario).

suerte,


javier ramírez

…i do ruby on rails development in madrid, spain, at
http://www.aspgems.com
…you can find out more about me on http://formatinternet.wordpress.com
and http://workingwithrails.com/person/5987-javier-ramirez


#16

gracias a todos por la ayuda
hasta que me salió
XD


#17

Francesc E. escribió:

bastante facil usarlo.
module S3

end
end
end

El tema es que no se donde miré pero diria que habia un módulo DB.

Attachment_fu [1] si tiene para db, aunque preferiria cortarme la mano
antes de hacerlo (bueno, por dinero, hasta programo en php :wink:

[1] http://github.com/technoweenie/attachment_fu/tree/master