Экто ассоциированный на пустой список

Я хочу получить на языке кучу статей, из которых у меня есть удостоверение личности.

Я пытаюсь что-то вроде этого:

Repo.all(from a in Article, where: a.id in ^article_ids) |> Ecto.assoc(:language) |> Repo.all

Это прекрасно работает, когда первый вызов Repo возвращает результаты. Но если первый вызов Repo вернет пустой список, я получу ошибку аргумента:

** (ArgumentError) cannot retrieve association :language for empty list

Какой хороший способ решить эту проблему в Фениксе?

1 ответ

Решение

Не уверен, как бы вы сделали это элегантно, используя Ecto.assoc/1, но ваш запрос может быть переписан с помощью JOIN запрос, как это:

Repo.all(
  from a in Article,
    join: l in assoc(a, :language),
    where: a.id in ^article_ids,
    select: l
)
Другие вопросы по тегам