将虚拟字段添加到对象

时间:2019-02-06 16:51:31

标签: elixir phoenix-framework ecto

  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}。我真正想做的是将它放入put_in,这样我就可以在视图中更轻松地访问它,例如link.click_count。有可能吗?

2 个答案:

答案 0 :(得分:2)

您的Ecto模式中是否有用于链接的虚拟字段?如果没有,您将要添加它:

field(:click_count, :integer, virtual: true)

然后您选择的内容如下所示:

select: %{l | click_count: count(l.id)}

由于您现在在click_count结构中拥有一个Link键,因此您可以放置​​该键,并且仍然具有Links的列表。因此,您应该可以访问link.click_count

答案 1 :(得分:1)

使用Kernel.elem/2

{Link, 10} |> elem(1) 
#⇒ 10

因此,在您的代码中:

query
|> Repo.all()
|> how_do_you_get_tuple()
|> elem(1)