¿Cómo acceder a ': has_many: a través de' join datos de la tabla cuando se utiliza a_json?
-
26-09-2019 - |
Pregunta
Tengo tres modelos simplificados (aquí):
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
Estoy enviando esto a algo de JavaScript utilizando el método a_json Rails como esto:
render :layout => false , :json => @child.to_json(
:include => {
:observations => {
:include => :photos,
:methods => [:key, :title, :subtitle]
}
},
:except => [:password]
)
Esto funciona perfectamente. Las observaciones se recuperan bien 'a través' de la tabla de unión (childviews).
No obstante , que también quieren llegar a los datos que se encuentra en el childviews tabla de unión; específicamente el valor de 'needs_edit'.
No se puede encontrar la manera de llegar a estos datos en una llamada a_json.
cualquier ayudaCan mí? Muchas gracias de antemano.
qryss
Solución
No es seguro, pero no debe este trabajo?
@child.to_json(
:include => {
:observations => {
:include => :photos,
:methods => [:key, :title, :subtitle]
},
:childviews => { :only => :needs_edit }
},
:except => [:password]
)
EDIT: Este trabajo podría también, ya childviews belongs_to la overvation:
@child.to_json(
:include => {
:observations => {
:include => { :photos, :childviews => { :only => :needs_edit } }
:methods => [:key, :title, :subtitle]
}
},
:except => [:password]
)
Otros consejos
Gracias a Rock para los punteros - ahora tengo que trabajar
Este código:
@child.to_json(:include =>
{
:observations => {
:include => {
:photos => {},
:childviews => {:only => :needs_edit}
},
:methods => [:S3_key, :title, :subtitle]
}
},
:except => [:password]
)
Me da esta salida (abreviado para mayor claridad):
{
"child":
{
"foo":"bar",
"observations":
[
{
"foo2":"bar2",
"photos":
[
{
"foo3":"bar3",
}
],
"childviews":
[
{
"needs_edit":true
}
]
}
]
}
}
Gracias, la roca! Que estaba haciendo en mi cabeza.
:)
qryss