Como acessar ': has_many: embora' participe dos dados da tabela ao usar para_json?
-
26-09-2019 - |
Pergunta
Eu tenho três modelos (simplificados aqui):
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
Estou enviando isso para algum JavaScript usando o método To_Json do Rails como este:
render :layout => false , :json => @child.to_json(
:include => {
:observations => {
:include => :photos,
:methods => [:key, :title, :subtitle]
}
},
:except => [:password]
)
Isso funciona perfeitamente. As observações são recuperadas bem 'através da tabela de junção (ChildViews).
No entanto, Eu também quero obter dados que estão na tabela ChildViews. Especificamente, o valor para 'Needs_edit'.
Não consigo descobrir como obter esses dados em uma chamada para_json.
Alguém pode me ajudar? Muito obrigado antecipadamente.
Qryss
Solução
Não tenho certeza, mas isso não deveria funcionar?
@child.to_json(
:include => {
:observations => {
:include => :photos,
:methods => [:key, :title, :subtitle]
},
:childviews => { :only => :needs_edit }
},
:except => [:password]
)
EDIT: Isso também pode funcionar, já que o ChildViews pertence a Overvation:
@child.to_json(
:include => {
:observations => {
:include => { :photos, :childviews => { :only => :needs_edit } }
:methods => [:key, :title, :subtitle]
}
},
:except => [:password]
)
Outras dicas
Obrigado ao Rock pelos Ponteiros - agora tenho que funcionar!
Este código:
@child.to_json(:include =>
{
:observations => {
:include => {
:photos => {},
:childviews => {:only => :needs_edit}
},
:methods => [:S3_key, :title, :subtitle]
}
},
:except => [:password]
)
Me dá essa saída (abreviada para maior clareza):
{
"child":
{
"foo":"bar",
"observations":
[
{
"foo2":"bar2",
"photos":
[
{
"foo3":"bar3",
}
],
"childviews":
[
{
"needs_edit":true
}
]
}
]
}
}
Obrigado, rock! Isso estava fazendo minha cabeça.
:)
Qryss