Dudas de ruby con count

disculpen q haga esta pregunta q es muy tonta pero es q no me queda
claro como hacer un count

tengo mi tabla productos

prod_total= Producto.count

eso anda bien
ahora

prod_especifico= Producto.find_by_id(5)
prod_especifico.count

eso no funciona, no encuentra el metodo count

como hago para contar eso?? debe de haber una manera elegante de hacerlo

gracias

Hola Sebastian,

el método find_by_id te va a devolver 1 objecto en caso de que lo
encuentre y nil en caso de que no. Un objeto o nil no tienen método
count, sino sólo los arrays.

Por eso creo que te has confundido de “finder dinámico” y andas
buscando algo como find_all_by_loquesea, sin embargo find_all_by_id no
tiene mucho sentido ya que el id va a ser, posiblemente clave única y
nunca devolvería más de un elemento.

Fernando B. wrote:

Hola Sebastian,

el m�todo find_by_id te va a devolver 1 objecto en caso de que lo
encuentre y nil en caso de que no. Un objeto o nil no tienen m�todo
count, sino s�lo los arrays.

Por eso creo que te has confundido de “finder din�mico” y andas
buscando algo como find_all_by_loquesea, sin embargo find_all_by_id no
tiene mucho sentido ya que el id va a ser, posiblemente clave �nica y
nunca devolver�a m�s de un elemento.

hola fernando,

entiendo lo q decis, pero estube probando y no me funciona, hize esto

supongamos q tengo 4 productos en mi tabla Productos con el nombre
“algo”

prod_especifico= Producto.find_all_by_nombre(“algo”)
prod_especifico.count (deberia ser 4)

y me arroja esto

undefined method `count’ for #Array:0xb76cccb0

Utiliza el .size mejor.

On Dec 9, 2006, at 7:40 AM, Sebastian M. wrote:

prod_especifico= Producto.find_by_id(5)
prod_especifico.count

eso no funciona, no encuentra el metodo count

como hago para contar eso?? debe de haber una manera elegante de
hacerlo

A diferencia de Java, en Ruby las instancias de una clase no
responden a los metodos de esa clase. Los metodos de clase son de la
clase.

Si tienes prod_especifico y sabes que es un producto entonces usa
Producto.count, si no conoces su clase (pero sabes que es un
AR::Base) sube a ella dinamicamente con Object#class:
prod_especifico.class.count.

– fxn

gracias Xavier y Fernando, ya comprendo como funciona.
saludos !

On Dec 9, 2006, at 9:04 AM, Sebastian M. wrote:

tiene mucho sentido ya que el id va a ser, posiblemente clave
prod_especifico= Producto.find_all_by_nombre(“algo”)
prod_especifico.count (deberia ser 4)

y me arroja esto

undefined method `count’ for #Array:0xb76cccb0

find_all_by_* devuelve una coleccion de objetos Producto, no un
producto especifico. Para calcular el tamaño de esa coleccion (que
tiene pinta de Array), hay que usar por ejemplo Array#size. No existe
Array#count.

El metodo ActiveRecord::Base.count es un metodo de clase que lanza
una query SQL para calcular via COUNT(). Puedes pasarle parametros si
quieres acotarla:

Person.count(:conditions => “age > 26 AND job.salary >
60000”, :include => :job)

because of the named association, it finds the DISTINCT count

using LEFT OUTER JOIN

– fxn