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 http://simplelogica.net/logicola/
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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs