2017-05-04 6 views
0

単純な要求を設定します。レコードから単一のレコードを取得するには、

a1 = where(MyModel, [x], is_nil(x.some_foreign_id)) |> Repo.one() 

例外:

** (exit) an exception was raised:         
    ** (Ecto.MultipleResultsError) expected at most one result but got 6 in query: 

はい、いくつかのレコードをそこにいる、それは大丈夫ですが、私の意図は第一を取ることです1。なぜ例外とそれを修正する方法?

答えて

3

例外

Repo.oneは常にゼロまたは1つのレコードを返し、プログラマではなく、データベースから複数のレコードを取得し、すべての投げるよりも、自分自身のクエリにlimitを追加する場合、それが良いだろうなぜしかし、1つ。

どのように修正するのですか?

あなたはlimit(1)使用することができます:レコードが返されorder、なし通常はほとんどのデータベースで定義されていないことを

a1 = where(MyModel, [x], is_nil(x.some_foreign_id)) |> limit(1) |> Repo.one() 

注意を。 idで注文して、最低値のレコードを取得することができます。id

a1 = where(MyModel, [x], is_nil(x.some_foreign_id)) |> order_by(:id) |> limit(1) |> Repo.one() 
関連する問題