Error con update_attribute

Hola

Estoy intentando hacer un update de varios registros pero me dice:
undefined method `update_attribute’ for #Array:0x46e1974

Lo estoy intentado así:

@content = Content.find(:all, :conditions => "op_id = " +
@session[:current_user])
@content .update_attribute(‘op’, 0)

Tb he puesto
@content .update_attribute(:op, ‘0’)
@content .update_attribute(‘op’, ‘0’)

Pero en todas me dice que no encuentra el método…

Alguien puede ayudarme?

Muchas gracias

Es update_attributes.

@content.update_attributes( :op => ‘0’)

Un saludo,

Francesc

On Nov 3, 2007, at 3:42 PM, Ramón Castro wrote:

Tb he puesto


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


name. Francesc E. i Martí
voice. +34 678.681.603

Es update_attributes.

@content.update_attributes( :op => ‘0’)

Un saludo,

Francesc

On Nov 3, 2007, at 3:42 PM, Ramón Castro wrote:

Tb he puesto


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


name. Francesc E. i Martí
voice. +34 678.681.603

El error que te da es de un array, no de un objeto.

Esto te deberia funcionar:

 Model.find(:first).update_attributes(:created_at => Time.now)

Un saludo,

Francesc

On Nov 3, 2007, at 4:46 PM, Ramón Castro wrote:

cuando eran varias era update_attributes.

Gracias

Posted via http://www.ruby-forum.com/.


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


name. Francesc E. i Martí
voice. +34 678.681.603

Francesc E. wrote:

Es update_attributes.

@content.update_attributes( :op => ‘0’)

Me da el mismo error:
undefined method `update_attributes’ for #Array:0x48a2524

Yo creía que cuando actualizabas una sóla columna era update_attribue y
cuando eran varias era update_attributes.

Gracias

El error que te da es de un array, no de un objeto.

El error lo da cuando intenta uptualizar cada una de las filas del array
resultamente de esta query no?

@content = Content.find(:all, :conditions => "op_id = " +
@session[:current_user])

E intento actualizar ese array entero.
@content.update_attributes( :op => ‘0’)

Si la consulta q hago sale sólo una fila o le pongo el first en vez de
all me funciona correctamente. Pero me da el error cuando intento
actualizar un grupo de filas.

Muchas gracias

Hola Ramón, creo que el error esta mas claro que el agua bendita ;), te
indica que el objeto no soporta el metodo ‘update_attribute’, y claro
que no
lo soporta por que es un Array y no una instancia de ActiveRecord, ya
que la
consulta que has hecho te esta devolviendo un conjunto de registros,
creo
que lo puedes solucionar asi:

@content.each {|c| c.update_attribute ‘op’,0}

update_attributes tambien existe, y recibe un Hash con los nombres y
valores
de los campos a actualizar, tambien se diferencia del anterior en que
este
ejecuta la validacion, osea si el valor del atributo que actualizas
rompe la
validacion, el registro no se actualiza

Creo que aqui puedes encontrar la información:

http://api.rubyonrails.com/classes/ActiveRecord/Base.html#M001056

Otro punto importante, acostumbrate siempre a usar ‘place holders’ en
tus
consultas para evitar ataques del tipo ‘sql injection’, osea tu consulta
la
podrias hacer asi:

@content = Content.find(:all, :conditions =>
[“op_id=?”,@session[:current_user]])

Espero te sirva de ayuda.

Saludos.
El día 3/11/07, Ramón Castro [email protected]
escribió:

@content.each {|c| c.update_attribute ‘op’,0}

Perfecto.

Muchas gracias a los dos.

Te me has adelantado jejeje.

Cordad que cuando hace una busqueda que puede devolver varias filas es
un array de objetos y no un objeto (creo).

@objeto.class” te dará algo de info.

Ruben. D. escribió: