Problema con json y rails 2.1.0


#1

No entiendo que pasa tengo la misma aplicacion en mi laptop con win
vista
basic y en el hosting que es un linuxel problema es que
si hago esto
p = Producto.find(:all)
p.to_json

en mi maquina me da
irb(main):004:0> d.to_json
=> “[{“creado”: “2008/10/10”, “marca_id”: 1, “descripcion”:
“Tele
sony
32 pulgadas”, “dato_padre”: null, “id”: 1, “modelo”: “S32”,
“tipo_de_p
roducto_id”: 1}, {“creado”: “2008/10/10”, “marca_id”: 1,
“descripcion”:
“Televisor sony 42\””, “dato_padre”: null, “id”: 2, “modelo”:
“S42”
, “tipo_de_producto_id”: 1}, {“creado”: “2008/10/10”,
“marca_id”: 1,
“d
escripcion”: “Televisor plasma 32 pulgadas sony”, “dato_padre”:
null,
“id
“: 3, “modelo”: “S32B3”, “tipo_de_producto_id”: 1}, {“creado”:
“2008/10
/10”, “marca_id”: 2, “descripcion”: “Tele de 32\” samsung”,
“dato_padr
e”: null, “id”: 4, “modelo”: “SA32X3”, “tipo_de_producto_id”:
1},
{“cr
eado”: “2008/10/13”, “marca_id”: 6, “descripcion”: “Televisor de
42\”
Full hd sony”, “dato_padre”: null, “id”: 5, “modelo”: “S42SP”,
“tipo_d
e_producto_id”: 3}]"

y en el servidor me da
irb(main):005:0> d.to_json
=> “[{“producto”: {“creado”: “2008-10-17”, “marca_id”: 1,
“descripcion”: “Televisor lcd sony 32 pulgadas”, “dato_padre”:
null,
“id”: 1, “modelo”: “KDL-32XBR6”, “tipo_de_producto_id”: 2}},
{“producto”: {“creado”: “2008-10-17”, “marca_id”: 2,
“descripcion”: “Television lcd 32\” sony bravia”, “dato_padre”:
null, “id”: 2, “modelo”: "KDL-32N4000 “, “tipo_de_producto_id”:
2}}]”

simplificando seria si pusieramos algo como
Producto.find(:first).to_json(
servidor — {producto:{id:22}}
mi maquina – {id:22}

el punto es que en el servidor le agrega el “producto”: { atributos }
no se porque crei que porque en mi lap tenia rails 2.0.2 y en el
servidor
2.1.0
segun yo instale 2.1.0 en mi maquina y le puse al environment que
ejecutase
ese
rails --version en ambas da lo mismo 2.1.0
pero sigue habiendo esa diferencia y me esta volviendo loco esta cosa =S

pues para el servidor seria
texto.evalJSON(); <-- funcion de prototype.js
texto[0].producto.modelo <— KDL-32XBR6

mientras que en mi maquina y como tengo todo el codigo seria
texto.evalJSON();
texto[0].modelo <-- KDL-32XBR6

alguna idea de que pueda estar pasando o que pueda hacer ???


#2

Me auto contesto pues todo un show para ver porque pasaba eso, me meti
hasta
la cocina revisando los rb de las gemas active support, etcpara llegar a
un
if por ahi en un metodo to_json en active record en el serializador lo
cual
me lleva a este archivito que agrega creo desde
la version 2.1.0 rails
el archivo es en config/initializers/new_rails_defaults.rb
en la linea

Include Active Record class name as root for JSON serialized output.

ActiveRecord::Base.include_root_in_json = true

donde tenemos que cambiar eso a false y con eso estuvo se tendra como
antes
el resultado

el if era
if include_root_in_json

curioso que minutos despues de desesperarme sin encontrar la solucion
mande
este mail y poco despues encontre la solucion =S
si alguien le sirve me alegra, espero no haber molestado.

El 17 de octubre de 2008 18:49, Omar J.
removed_email_address@domain.invalidescribió:


#3

Yo me di cuenta de ese comportamiento cuando vi que me dejaban de
funcionar
un par de cosas, pero tampoco investigué mucho, simplemente lo usé como
venía.

Gracias por tu autorespuesta :stuck_out_tongue:


#4

es decir cambiaste el codigo para adecuarlo hacia el {className:{id:3}}
?mm
pues yo me di cuenta que lo ponia asi y pensaba en simplemente cambiar
el
codigo adecuandolo a eso y ya pero
lo que me preocupaba eran 2 cosas
1.- que en mi computadora lo ponia de otra forma
2.- que no me gusta poner parches de “errores” sin saber 3 cosas ( que
error
es, como se soluciona y porque pasa eso) y en este caso
creia saber la 1 y la 2 pero no la 3 :stuck_out_tongue:

2008/10/20 Ceritium removed_email_address@domain.invalid