Añadir metodos a un modelo en rails 2.0.2

Buenas tardes muchachos tengo una gran incognita por aca, tengo un
modelo con el siguiente codigo:
class SecGrupoLinea < ActiveRecord::Base
def guardar_cantidad(valor)
self.cant_rec = valor
save!
end

private
def validate # validation is called by Active Record
errors.add(:cant_rec, “is negative” ) if cant_rec <= 0
end

en el controlador tengo una variable de este tipo y quiero llamar al
metodo guardar_cantidad, este es el codigo

grupo_recurso_linea = SecGrupoLinea.find(:all,:conditions => “fk_id_gr =
#{params[:id]} AND fk_id_rec = #{params[“id_reg_2”]}”)
grupo_recurso_linea.guardar_cantidad(params[“cantidad_1_valor”])

pero me lanza una error rails cuando ejecuta
grupo_recurso_linea.guardar_cantida, este es el error:
NoMethodError in Sec grupo recursosController#update

undefined method `guardar_cantidad’ for [#<SecGrupoLinea fk_id_gr: 14,
fk_id_rec: 2521, cant_rec: 1.0>]:Array

por lo que veo no encuentra el metodo guardar_cantidad.
que estoy haciendo mal???

2008/4/23 Melvin M. [email protected]:

Buenas tardes muchachos tengo una gran incognita por aca, tengo un

Leyendo el mensaje de error con un poco de calma lo verías.

undefined method `guardar_cantidad’ for [#<SecGrupoLinea fk_id_gr: 14,
fk_id_rec: 2521, cant_rec: 1.0>]:Array

Has hecho un find :all, con lo cual grupo_recurso_linea es un array.
¿Lo ves indicado en la línea anterior? Por tanto no tienes el método
guardar_cantidad disponible.

por lo que veo no encuentra el metodo guardar_cantidad.
que estoy haciendo mal???

Simplemente asegúrate de que grupo_recurso_linea sea un objeto tipo
SecGrupoLinea. Con un find :first; extrayéndolo del array o lo que
mejor te convenga.


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o simplelogica.net
Recuerda comer mucha fruta y verdura.

claro ese era el error… recorro el array que me devuelve con el find
:all y ya se arreglo, muchas gracias…

hola,

grupo_recurso_linea = SecGrupoLinea.find(:all,:conditions => “fk_id_gr =
#{params[:id]} AND fk_id_rec = #{params[“id_reg_2”]}”)
grupo_recurso_linea.guardar_cantidad(params[“cantidad_1_valor”])

en esa línea dices find(:all) es decir, encuéntrame TODOS, con lo que
el resultado no será una línea, sino varias. Puede ser que la
condición no devuelva nada, o que devuelva una línea solamente, pero de todos
modos te lo va a dar en un array.

undefined method `guardar_cantidad’ for [#<SecGrupoLinea fk_id_gr: 14,
fk_id_rec: 2521, cant_rec: 1.0>]:Array

y mira… te lo dice… te dice que el método no existe para la clase Array

puedes o bien pedir find(:first) o bien iterar por el array y ejecutar
para cada línea el método que quieres… depende de lo que necesites

suerte,

javier ramírez