Sorry it took a while, I had to find some time to setup a public repo and 
reproduce this. You can find it 
at https://github.com/lboekhorst/many_to_many. It has two tests, one to 
assert that a record is added to the join table (passes), and one test that 
checks if the length of the preloaded list is equal to 1 (fails).

Op donderdag 26 mei 2016 21:53:42 UTC+2 schreef José Valim:
>
> Sorry, I was supposed to ask in your migrations and schema. :)
>
> There is a chance this is an Ecto bug, can you reproduce this in a public 
> application?
>
> On Thursday, May 26, 2016, <[email protected] <javascript:>> wrote:
>
>> In my migrations I have specified binary_id:
>>
>> *  def change do*
>> *    create table(:offers, primary_key: false) do*
>> *      add :id, :binary_id, primary_key: true*
>> *      add :percentage, :float, null: false*
>> *      add :shipment_id, references(:shipments, on_delete: :delete_all, 
>> type: :binary_id), null: false*
>>
>> *      timestamps*
>> *    end*
>>
>> *    create index(:offers, [:shipment_id])*
>> *  end*
>>
>>
>> It has been mapped to a UUID column in Postgres.
>>
>> Op donderdag 26 mei 2016 21:03:34 UTC+2 schreef José Valim:
>>>
>>> Can you tell me what is the type of your ID columns in the database and 
>>> in your migrations?
>>>
>>>
>>>
>>> *José Valim*
>>> www.plataformatec.com.br
>>> Skype: jv.ptec
>>> Founder and Director of R&D
>>>
>>> On Thu, May 26, 2016 at 8:44 PM, <[email protected]> wrote:
>>>
>>>> My bad, this is rc-5.
>>>>
>>>> Op donderdag 26 mei 2016 20:19:34 UTC+2 schreef José Valim:
>>>>>
>>>>> Which RC version? I believe this may have been fixed on more recent 
>>>>> RCs.
>>>>>
>>>>>
>>>>>
>>>>> *José Valim*
>>>>> www.plataformatec.com.br
>>>>> Skype: jv.ptec
>>>>> Founder and Director of R&D
>>>>>
>>>>> On Thu, May 26, 2016 at 8:09 PM, <[email protected]> wrote:
>>>>>
>>>>>> This is Ecto 2.0.0-rc, through phoenix_ecto 3.0.0-rc.0
>>>>>>
>>>>>> Op donderdag 26 mei 2016 19:51:44 UTC+2 schreef José Valim:
>>>>>>>
>>>>>>> Which Ecto version are you using?
>>>>>>>
>>>>>>> *José Valim*
>>>>>>> www.plataformatec.com.br
>>>>>>> Skype: jv.ptec
>>>>>>> Founder and Director of R&D
>>>>>>>
>>>>>>> On Thu, May 26, 2016 at 6:30 PM, <[email protected]> wrote:
>>>>>>>
>>>>>>>> So I have been digging a little deeper and Ecto is issuing the 
>>>>>>>> following query:
>>>>>>>>
>>>>>>>> *SELECT r0."id", *snip*, o1."offer_id" FROM "rates" AS r0 INNER 
>>>>>>>> JOIN "offers_rates" AS o1 ON o1."offer_id" = ANY($1) WHERE 
>>>>>>>> (o1."rate_id" = 
>>>>>>>> r0."id") ORDER BY o1."offer_id" [[<<163, 3, 242, 94, 74, 2, 77, 110, 
>>>>>>>> 159, 
>>>>>>>> 78, 123, 64, 97, 42, 5, 33>>]]*
>>>>>>>>
>>>>>>>>
>>>>>>>> This comes up as an empty association in my code. When I do the 
>>>>>>>> following query in psql however, I do get the result I expect:
>>>>>>>>
>>>>>>>> *SELECT * FROM rates INNER JOIN offers_rates ON 
>>>>>>>> offers_rates.offer_id='a303f25e-4a02-4d6e-9f4e-7b40612a0521' WHERE 
>>>>>>>> offers_rates.rate_id = rates.id <http://rates.id>; *
>>>>>>>>
>>>>>>>>
>>>>>>>> Does this offer some more insight? 
>>>>>>>>
>>>>>>>> Op donderdag 26 mei 2016 18:09:47 UTC+2 schreef [email protected]:
>>>>>>>>
>>>>>>>>> Hi José,
>>>>>>>>>
>>>>>>>>> Thanks for the fast response. That doesn't seem to do it however. 
>>>>>>>>> If I do not preload anything, I get an error message saying that the 
>>>>>>>>> offers 
>>>>>>>>> are not preloaded. If I preload the offers, it says the rates are not 
>>>>>>>>> preloaded, and if I preload everything, with force set to true, the 
>>>>>>>>> rates 
>>>>>>>>> are still empty. Is there anything else I can try?
>>>>>>>>>
>>>>>>>>> Op donderdag 26 mei 2016 17:07:36 UTC+2 schreef José Valim:
>>>>>>>>>>
>>>>>>>>>> Try:
>>>>>>>>>>
>>>>>>>>>>  *offers = Repo.preload(shipment, [offers: :rates], force: true)*
>>>>>>>>>>  
>>>>>>>>>>
>>>>>>>>>> If the association was already loaded, we won't load over it.
>>>>>>>>>>
>>>>>>>>>> *José Valim*
>>>>>>>>>> www.plataformatec.com.br
>>>>>>>>>> Skype: jv.ptec
>>>>>>>>>> Founder and Director of R&D
>>>>>>>>>>
>>>>>>>>>> On Thu, May 26, 2016 at 5:05 PM, <[email protected]> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hello,
>>>>>>>>>>>
>>>>>>>>>>> I have a many-to-many relationship defined as follows:
>>>>>>>>>>>
>>>>>>>>>>> *  schema "rates" do*
>>>>>>>>>>> *    many_to_many :offers, Offer, join_through: "offers_rates"*
>>>>>>>>>>> *  end*
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> *  schema "offers" do*
>>>>>>>>>>> *    many_to_many :rates, Rate, join_through: "offers_rates"*
>>>>>>>>>>> *  end *
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> The offers_rates table is simply a table that has a offer_id 
>>>>>>>>>>> column, and a rate_id column. I am saving records as follows:
>>>>>>>>>>>
>>>>>>>>>>> *    Enum.map rates, fn (rate) ->*
>>>>>>>>>>> *      Offer.changeset(%Offer{rates: [rate]}, %{shipment_id: 
>>>>>>>>>>> rate.shipment_id, percentage: 1.05})*
>>>>>>>>>>> *      |> Repo.insert!()*
>>>>>>>>>>> *    end *
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> For every rate, this is generating an offer. I am association 
>>>>>>>>>>> the rates with the offer in the changeset. This seems to work as I 
>>>>>>>>>>> can see 
>>>>>>>>>>> the join table being filled properly. When I try to fetch them 
>>>>>>>>>>> later, the 
>>>>>>>>>>> association is empty however:
>>>>>>>>>>>
>>>>>>>>>>>  *offers = Repo.preload(shipment, offers: :rates)* 
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> * %Offer{rates: []} *
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Are these the proper ways of association records and fetching 
>>>>>>>>>>> them from the database again? Any push in the right direction is 
>>>>>>>>>>> greatly 
>>>>>>>>>>> appreciated.
>>>>>>>>>>>
>>>>>>>>>>> Thanks! 
>>>>>>>>>>>
>>>>>>>>>>> -- 
>>>>>>>>>>> You received this message because you are subscribed to the 
>>>>>>>>>>> Google Groups "elixir-lang-talk" group.
>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from 
>>>>>>>>>>> it, send an email to [email protected].
>>>>>>>>>>> To view this discussion on the web visit 
>>>>>>>>>>> https://groups.google.com/d/msgid/elixir-lang-talk/90e0e96e-a6ca-4111-b4cc-e9d180b99b6b%40googlegroups.com
>>>>>>>>>>>  
>>>>>>>>>>> <https://groups.google.com/d/msgid/elixir-lang-talk/90e0e96e-a6ca-4111-b4cc-e9d180b99b6b%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>>>>> .
>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> -- 
>>>>>>>> You received this message because you are subscribed to the Google 
>>>>>>>> Groups "elixir-lang-talk" group.
>>>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>>>> send an email to [email protected].
>>>>>>>> To view this discussion on the web visit 
>>>>>>>> https://groups.google.com/d/msgid/elixir-lang-talk/589094f3-2694-4b15-9d39-03d8e4869682%40googlegroups.com
>>>>>>>>  
>>>>>>>> <https://groups.google.com/d/msgid/elixir-lang-talk/589094f3-2694-4b15-9d39-03d8e4869682%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>> .
>>>>>>>>
>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>
>>>
>
> -- 
>
>
> *José Valim*
> www.plataformatec.com.br
> Skype: jv.ptec
> Founder and Director of R&D
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-talk/8ab188c7-6453-401a-9764-748c6d2c1ccf%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to