7
votes

JSON inclut la syntaxe

Ma configuration: Rails 2.3.10, Ruby 1.8.7

J'ai un ensemble de relations assez compliqué entre plusieurs modèles. P>

classA.to_json(:include => [ :classB => { :include => { :classC => { :include => :classE } } },
                             :classD, :classE  ])


1 commentaires

Je suppose classa est un objet de classe a ?


3 Réponses :


1
votes

Je ne sais pas si vous voulez que la Classe incluse à la fois par classe C et classée, mais cela devrait fonctionner:

class A
  has_many :bs
  has_many :ds
end

class B
  belongs_to :a
  has_many :cs
end

class C
  belongs_to :b
  belongs_to :e
end

class D
  belongs_to :a
  belongs_to :e
end

class E
  has_many :ds
  has_many :cs
end

@class_a = A.first
@class_a.to_json(:include => { :bs => { :include => { :cs => { :include => :e } } },
                               :ds => { :include => :e } })


6 commentaires

J'ai déjà essayé cela avant et il jette cette erreur non négligecule "méthode indéfinie` macro 'pour nil: nilclass "


D'accord, alors juste pour m'assurer que je suppose que la classe n'est pas en réalité le modèle, mais une instance de CLASSA, non? Et après cela, je vérifierais que vos associations causent dans votre exemple que vous mélangez appartient à l'appartenance_to et HAS_MANY, mais l'association est juste nommée Classa par exemple. Assurez-vous simplement d'utiliser une syntaxe singulière / plurielle correspondante dans vos associations et TO_JSON.


Vous avez raison, Classa dans la ligne JSON est une instance et je n'utilise pas la syntaxe du singulier / pluriel approprié ci-dessus mais dans mon code, je suis. Le: inclure le code devrait tous être des pluraux.


À l'exception de la Classe qui n'est associée qu'avec Apparts_to: Classe Désolé, je ne peux pas dire à certains moment que vous publiez votre code actuel. J'ai essayé ma syntaxe avec une configuration similaire dans mon propre projet et cela fonctionne pour moi.


Vous n'êtes pas sûr de ce que vous entendez par «Classe qui n'est associé qu'avec ApportS_To: Classe»? Basé sur votre exemple, j'ai mis à jour ma question avec quelque chose qui pourrait fonctionner mais pas tout à fait.


Ce que je voulais dire, c'est que, puisque Classe est un appartement_to, il devrait être défini comme singulier, pas pluriel. Je verrai si je peux clarifier à nouveau.



1
votes

Essayez ceci, vous ne devez avoir besoin que d'un : inclure => : xxx


0 commentaires

13
votes

Cela devrait fonctionner:

classA.to_json(:include => {
  :classB => {:include => {:classC => {:include => :classE}}},
  :classD => {},
  :classE => {},
})


2 commentaires

Oui, cela a travaillé, je suis venu à la même conclusion moi-même, de la petite bague de syntaxe difficile.


Avoir un vote UP - Ajout => {} semble être nécessaire lorsque vous avez plusieurs relations à un niveau, et au moins l'une d'entre elles a une sous-inclure dessus.