Ich lerne Phönix- und Ecto-Assoziationen, aber ich bin auf ein Problem gestoßen, das ich scheinbar nicht lösen kann, während ich versuche, verschachtelte Assoziationen zu laden. Ich habe 3-SchemataEcto preload verschachtelt
Angebot, das jetzt
schema "offers" do
...
has_one :albumMariageSmall, Album, on_delete: :delete_all, on_replace: :delete
has_one :prewedding, Prewedding, on_delete: :delete_all,
on_replace: :delete
has_one :next_day, Prewedding, on_delete: :delete_all, on_replace: :delete
end
hat, sieht der Prewedding wie
schema "preweddings" do
...
has_one :album, Album, on_delete: :delete_all, on_replace: :delete
end
und das Album sieht aus wie
schema "albums" do
...
belongs_to :offer, Offer
belongs_to :prewedding, Prewedding
end
Mit anderen Worten, kann ein Angebot Habe ein Album und zwei Preweddings, bei denen Prewedding ein Album haben kann.
Datenbankweise referenziert das: preweddings das Angebot über offer_id und das: album referenziert die Angebote durch offer_id und die Preweddings durch prewedding_id.
Ich habe Probleme beim Laden eines gespeicherten Angebot als beide: prewedding und: next_day scheinen auf die gleiche Zeile zeigen, wenn ich inspiziere.
ich vorzuladen versuche mit
offer=Repo.one from(o in Offer, preload: [{:prewedding, [:album]},{:next_day, [:album]}], select: o, where: o.id==^id)
Ich nehme an, ich kann es mit Verknüpfungen funktioniert, aber ich bin stur genug tun Vorbelastung zu wollen.
Kann jemand helfen?
Migration von preweddings gerade dieses
add :included, :boolean, default: false, null: false
add :offer_id, references(:offers)
Album hat
add :offer_id, references(:offers)
add :prewedding_id, references(:preweddings)
Können Sie Ihre Migrationen von "preweddings" posten? Wahrscheinlich müssen Sie für die beiden "has_one" in "offers" einen benutzerdefinierten "foreign_key" angeben, oder beide werden auf die Spalte "offer_id" zeigen. – Dogbert
mmm es gibt keine benutzerdefinierten Fremdschlüssel und wenn ich es versuchte, fügte ich dem Album (Referenzen) hinzu. Lass mich sehen. –
Nun, Sie brauchen zwei Spalten in Preweddings, die auf Angebote zeigen, wenn Sie zwei 'has_one' wollen, die das gleiche tun. Im Moment benutzen beide 'offer_id', was bedeutet, dass beide identische Werte haben. – Dogbert