Добавление виртуального поля к объекту
def list_links_count do
query =
from l in Link,
join: c in Click, as: :click,
where: c.link_id == l.id,
group_by: l.id,
select: {l, count(l.id)}
query |> Repo.all
end
У меня есть функция, которая подсчитывает количество кликов на ссылку. Проблема в окончательной структуре данных, которая имеет вид {Link, 10}
, То, что я действительно хотел бы сделать, это поместить это в общее число, чтобы я мог получить к нему более легкий вид, что-то вроде link.click_count
, Это возможно?
2 ответа
Решение
Есть ли у вас виртуальное поле в вашей схеме Ecto для Link? Если нет, вы захотите добавить его:
field(:click_count, :integer, virtual: true)
Тогда ваш выбор может выглядеть примерно так:
select: %{l | click_count: count(l.id)}
Так как теперь у вас есть click_count
введите ваш Link
структуры, вы можете поставить этот ключ и по-прежнему иметь список Links
, Таким образом, вы должны иметь возможность доступа link.click_count
,
Использование Kernel.elem/2
:
{Link, 10} |> elem(1)
#⇒ 10
Итак, в вашем коде:
query
|> Repo.all()
|> how_do_you_get_tuple()
|> elem(1)