Ext_Scaffold : fonction to_ext_json

Bonjour,

Je rencontre un petit soucis avec la fonction to_ext_json du plugin
Ext_scaffold.

Mon appel est le suivant :

format.ext_json { render :json => find_accounts.to_ext_json( :count =>
Account.count) }

Et voici ce qui m’est retourné :

{
“accounts”: [
{“account”:
{“lastname”: “Chauveau”, “id”: 1, “firstname”: “Tony”, “login”:
“tchauveau”, “created_at”: “2008-06-08T10:35:50Z”}
},
{“account”:
{“lastname”: “test”, “id”: 2, “firstname”: “test”, “login”:
“test”, “created_at”: “2008-06-08T10:35:50Z”}
}
],
“results”: 2
}

Alors que ce que je souhaite obtenir devrait ressembler à ceci :

{
“results”: 2,
“accounts”: [
{“lastname”: “Chauveau”, “id”: 1, “firstname”: “Tony”, “login”:
“tchauveau”, “created_at”: “2008-06-08T10:35:50Z”},
{“lastname”: “test”, “id”: 2, “firstname”: “test”, “login”: “test”,
“created_at”: “2008-06-08T10:35:50Z”}
]
}

Bien sur, la solution “simple” serait de formater moi-meme la sortie
mais j’aimerais tout de meme savoir ce qui se passe et pourquoi cette
fonction ne retourne pas ce qu’elle est sensée retourner (la sortie que
je souhaite est au meme format que l’exemple donné en commentaire dans
la fonction to_ext_json :

return Ext compatible JSON form of an Array, i.e.:

#  {"results": n,
#   "posts": [ {"id": 1, "title": "First Post",
#               "body": "This is my first post.",
#               "published": true, ... },
#               ...
#            ]
#  }

def to_ext_json(options = {})
  if given_class = options.delete(:class)
    element_class = (given_class.is_a?(Class) ? given_class :

given_class.to_s.classify.constantize)
else
element_class = first.class
end
element_count = options.delete(:count) || self.length

  { :results => element_count,

element_class.to_s.underscore.pluralize => self }.to_json(options)
end

)

Le 8 juin 2008 19:07, Tony C. a écrit :

Je rencontre un petit soucis avec la fonction to_ext_json du plugin
Ext_scaffold.

Mon appel est le suivant :

format.ext_json { render :json => find_accounts.to_ext_json( :count =>
Account.count) }

Et voici ce qui m’est retourné :

(blip)

Alors que ce que je souhaite obtenir devrait ressembler à ceci :

(bloup)

Bien sur, la solution “simple” serait de formater moi-meme la sortie
mais j’aimerais tout de meme savoir ce qui se passe et pourquoi cette
fonction ne retourne pas ce qu’elle est sensée retourner (la sortie que
je souhaite est au meme format que l’exemple donné en commentaire dans
la fonction to_ext_json :

Essaie avec :
accounts = Account.find :all, :offset => 1, :limit => 10

et examine accounts.to_ext_json(:count => 10)

Tant qu’à faire, envoie le résultat de Account.find(:first).to_ext_json

– Jean-François.


http://twitter.com/underflow_

Finalement, j’ai trouvé d’ou celà vient.

to_json a apparemment été mis à jour avec rails 2.1.

avec rails 2.0.2, on obtient ceci :

{“results”: 1, “posts”: [{“updated_at”: “2008/06/09 11:53:16 +0200”,
“title”: “test”, “published”: true, “id”: 1, “content”: “contenu”,
“created_at”: “2008/06/09 11:53:16 +0200”}]}

avec rails 2.1, voilà le résultat que j’obtiens pour le meme modèle :

{“posts”: [{“post”: {“updated_at”: “2008-06-09T07:56:46Z”, “title”:
“test”, “published”: true, “id”: 1, “content”: “contenu”, “created_at”:
“2008-06-09T07:56:46Z”}}], “results”: 1}

Je n’ai pas trouvé de mention concernant ce changement

Le 9 juin 2008 14:15, Tony C. a écrit :

avec rails 2.1, voilà le résultat que j’obtiens pour le meme modèle :

{“posts”: [{“post”: {“updated_at”: “2008-06-09T07:56:46Z”, “title”:
“test”, “published”: true, “id”: 1, “content”: “contenu”, “created_at”:
“2008-06-09T07:56:46Z”}}], “results”: 1}

Je n’ai pas trouvé de mention concernant ce changement

Tu peux changer le comportement avec :

Account.include_root_in_json = false

Je viens de m’apercevoir qu’un post d’un blog en parlait :

http://www.extjswithrails.com/2008/05/more-rails-21-that-target-json-and.html

– Jean-François.


http://twitter.com/underflow_