Wie man Zugang ‚: has_many: durch‘ beitreten Datentabelle, wenn to_json mit?
-
26-09-2019 - |
Frage
Ich habe drei Modelle (vereinfachte hier):
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
Ich sende diese zu einem gewissen JavaScript mit Rails' to_json Methode wie folgt:
render :layout => false , :json => @child.to_json(
:include => {
:observations => {
:include => :photos,
:methods => [:key, :title, :subtitle]
}
},
:except => [:password]
)
Das funktioniert perfekt. Die Beobachtungen werden abgerufen fein 'durch' die Join-Tabelle (childviews).
Jedoch , möchte ich auch auf Daten erhalten, die Tabelle in den childviews sitzt verbinden; speziell der Wert für 'needs_edit'.
Ich kann nicht herausfinden, wie bei diesen Daten in einem to_json Anruf zu erhalten.
Kann mir jemand helfen? Vielen Dank im Voraus.
qryss
Lösung
Nicht sicher, aber sollte das nicht?
@child.to_json(
:include => {
:observations => {
:include => :photos,
:methods => [:key, :title, :subtitle]
},
:childviews => { :only => :needs_edit }
},
:except => [:password]
)
EDIT: Dies könnte funktionieren auch, da childviews belongs_to der overvation:
@child.to_json(
:include => {
:observations => {
:include => { :photos, :childviews => { :only => :needs_edit } }
:methods => [:key, :title, :subtitle]
}
},
:except => [:password]
)
Andere Tipps
Dank Felsen für die Zeiger - die ich jetzt habe es funktioniert
Mit diesem Code:
@child.to_json(:include =>
{
:observations => {
:include => {
:photos => {},
:childviews => {:only => :needs_edit}
},
:methods => [:S3_key, :title, :subtitle]
}
},
:except => [:password]
)
gibt mir diese Ausgabe (abgekürzt für Klarheit):
{
"child":
{
"foo":"bar",
"observations":
[
{
"foo2":"bar2",
"photos":
[
{
"foo3":"bar3",
}
],
"childviews":
[
{
"needs_edit":true
}
]
}
]
}
}
Danke, Rock! Das tat meinen Kopf.
:)
qryss