Comment accéder à « : has_many: par » Joindre les données de table lors de l'utilisation to_json?
-
26-09-2019 - |
Question
J'ai trois modèles simplifiés (ici):
class Child < ActiveRecord::Base
has_many :childviews, :dependent => :nullify
has_many :observations, :through => :childviews
end
class Childview < ActiveRecord::Base
belongs_to :observation
belongs_to :child
end
class Observation < ActiveRecord::Base
has_many :childviews, :dependent => :nullify
has_many :children, :through => :childviews
end
J'envoie cela à un peu de JavaScript en utilisant la méthode to_json Rails comme ceci:
render :layout => false , :json => @child.to_json(
:include => {
:observations => {
:include => :photos,
:methods => [:key, :title, :subtitle]
}
},
:except => [:password]
)
Cela fonctionne parfaitement. Les observations sont récupérées fin 'à' la table de jointure (childviews).
Cependant , je veux aussi à des données qui se trouve dans les childviews table de jointure; en particulier la valeur de 'needs_edit'.
Je ne peux pas comprendre comment obtenir à ces données dans un appel to_json.
aide quelqu'un peut me? Un grand merci à l'avance.
qryss
La solution
Je ne sais pas, mais ne devrait pas ce travail?
@child.to_json(
:include => {
:observations => {
:include => :photos,
:methods => [:key, :title, :subtitle]
},
:childviews => { :only => :needs_edit }
},
:except => [:password]
)
EDIT: Ce travail pourrait aussi, depuis childviews belongs_to le overvation:
@child.to_json(
:include => {
:observations => {
:include => { :photos, :childviews => { :only => :needs_edit } }
:methods => [:key, :title, :subtitle]
}
},
:except => [:password]
)
Autres conseils
Merci à Roche pour les pointeurs - j'ai maintenant travailler
Ce code:
@child.to_json(:include =>
{
:observations => {
:include => {
:photos => {},
:childviews => {:only => :needs_edit}
},
:methods => [:S3_key, :title, :subtitle]
}
},
:except => [:password]
)
me donne cette sortie (en abrégé par souci de clarté):
{
"child":
{
"foo":"bar",
"observations":
[
{
"foo2":"bar2",
"photos":
[
{
"foo3":"bar3",
}
],
"childviews":
[
{
"needs_edit":true
}
]
}
]
}
}
Merci, Rock! Ce faisait dans ma tête.
:)
qryss