フェニックスとエクトーの関連を学んでいますが、ネストされた関連付けを事前ロードしようとしているときに解決できないような問題が発生しました。私が持っている3つのスキーマEcto preload nested
は 今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
を持って
オファーは、Preweddingは
schema "preweddings" do
...
has_one :album, Album, on_delete: :delete_all, on_replace: :delete
end
のように見え、アルバムは言い換えれば
schema "albums" do
...
belongs_to :offer, Offer
belongs_to :prewedding, Prewedding
end
のように見える、オファーができますPreweddingはアルバムを持つことができるアルバムと2つのPreweddingを持っている。
データベース:ww:preweddingsはoffer_idを通じてオファーを参照しています::albumsはoffer_idを通じてオファーを参照し、prewedding_idを介してpreweddingsを参照しています。
保存済みのオファーを読み込む際に問題があります。プリウィングと:next_dayは、私が検査しているときに同じ行を指しているようです。
私は
offer=Repo.one from(o in Offer, preload: [{:prewedding, [:album]},{:next_day, [:album]}], select: o, where: o.id==^id)
を使用してプリロードしようとしている私は、私はそれが結合して動作させることが可能と仮定し、しかし、私は予圧をやりたいのに十分な頑固です。
誰かが助けることができますか?
preweddingsの移行だけで、この
add :included, :boolean, default: false, null: false
add :offer_id, references(:offers)
アルバムデフォルト
add :offer_id, references(:offers)
add :prewedding_id, references(:preweddings)
あなたは "preweddings" のあなたの移行を投稿することができますか? "オファー"に2つの 'has_one'のカスタム' foreign_key'を指定する必要があるか、どちらも 'offer_id'カラムを指します。 – Dogbert
mmmカスタム外部キーはありません。試してみると、アルバム(参考文献)に追加されました。そうねぇ。 –
まあ、2つの 'has_one'が同じになるようにするには、オファーを指し示すpreweddingsに2つの列が必要です。今は両方とも 'offer_id'を使用しています。これはどちらも同じ値を持つことを意味します。 – Dogbert