Why does Ecto’s Repo.get_by returns nil. Example
dizzy = Repo.get_by(Artist, name: "Dizzy Gillespie")
iex(1) dizzy
nil
Why does Ecto’s Repo.get_by returns nil. Example
dizzy = Repo.get_by(Artist, name: "Dizzy Gillespie")
iex(1) dizzy
nil
So if you’re on Ecto 3.x (I’m looking at Ecto 3.2.5 documentation now), Repo.get_by returns nil under the following condition:
Returns
nil
if no result was found. Raises if more than one entry.
This means that your database doesn’t contain an “Artist” with an entry whose name is Dizzy Gillespie.
Can you do a Repo.all to see what data you have in the Artists table?
I just added an Artist with,
Repo.insert(%Artist{name: "Dizzy Gillespie"})
Then checked by
Repo.aggregate(Artist, ;count, :id)
and indeed it was added. So it contains the artist. Still the get_by result is nil.
Yes it’s all there, but why the variable containing the result of Repo.get_by returns nil?
Are you sure that there was no other entry in the DB? What is the return value od Repo.all(Artist)
?
Isn’t there some tricky utf8 character somewhere?
Like I said the expected values are there, just wondering the meaning of get_by 's return value of nil?
@treble37 pointed you to the documentation fragment:
Returns
nil
if no result was found. Raises if more than one entry.
What do you want to know more?
There is exactly 1 matching entry, so why nil?
If it’s nil
then there is not one matching entry, something about the lookup is incorrect.