2012-02-11 18 views
10

me gustaría obtener el tamaño en bytes del contenido de una matriz (material) de rubí.Rubí obtener el tamaño en bytes de una matriz

lleno mi serie como esta:

@records.each do |record| 
    items << { :table => table, :id => record.id, :lruos => record.updated_at } 
    end 

De hecho, yo quiero forzar el envío de la longitud del contenido de esta matriz cuando serializarlo en JSON:

respond_to do |format| 
    #response['Content-Length'] = items.to_s.size 
    format.json { render :json => { :success => "OK", :items => items } } 
end 

Así que cualquier idea hacer esto podría ser interesante. (por una razón que no sé la longitud del contenido no se envía, entonces quiero forzarlo)

Uso Rails 3.0.5.

+1

¿Por qué no en su lugar primero serializarlo y luego obtener el tamaño de la cadena serializada? El JSON serializado es probablemente más grande que el arreglo, por lo que su enfoque no funcionaría. –

Respuesta

7

Como dijo WTP, probablemente tiene la intención de devolver el tamaño de la representación JSON en lugar de la representación ruby ​​de la matriz, porque el JSON es la respuesta real al navegador. Puede hacer esto codificando de antemano (produciendo una cadena) y luego verificando su tamaño.

response['Content-Length'] = ActiveSupport::JSON.encode(items).size 

More about JSON serialization and rails

+0

entiendo lo que dice y la manera de serializar, pero la adición de su línea, tengo este error: Error de lectura: #

+0

El problema es el 'tamaño'. Intenté con "longitud" pero el mismo error. –

+0

Hm, no estoy seguro de por qué está sucediendo eso. ¿Puedes construir un hash de registro y serializarlo en la consola de Rails? ActivSupport :: JSON debería ser capaz de serializar casi cualquier cosa: maneja todos los objetos y primitivas de Rails, y también debería llamar a to_s en objetos que no tienen to_json. Usted podría intentar serializar campos individuales de la almohadilla (es decir, codificar (record.updated_at), codificar (tabla), codificar (record.id), etc hasta que encuentre un error - entonces usted sabe lo que no está siendo apoyado –

1

Para aquellos que todavía se pregunta - He encontrado que esto funcione

ActiveSupport::JSON.encode(items).size.to_s 

que si bien sus muchos años más tarde - pueden ayudar a alguien.

Cuestiones relacionadas