向对象添加虚拟字段
Adding a virtual field to an object
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 的点击次数。问题在于最终的数据结构,其形式为 {Link, 10}
。我真正想做的是让总数达到 put_in,这样我就可以在视图中更轻松地访问它,例如 link.click_count
。这可能吗?
{Link, 10} |> elem(1)
#⇒ 10
因此,在您的代码中:
query
|> Repo.all()
|> how_do_you_get_tuple()
|> elem(1)
您的 Ecto 架构中是否有 Link 的虚拟字段?如果没有,您需要添加它:
field(:click_count, :integer, virtual: true)
那么你的 select 可能看起来像这样:
select: %{l | click_count: count(l.id)}
由于您现在在 Link
结构中有一个 click_count
键,您可以放置该键并且仍然有一个 Links
列表。所以你应该能够访问 link.click_count
.
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 的点击次数。问题在于最终的数据结构,其形式为 {Link, 10}
。我真正想做的是让总数达到 put_in,这样我就可以在视图中更轻松地访问它,例如 link.click_count
。这可能吗?
{Link, 10} |> elem(1)
#⇒ 10
因此,在您的代码中:
query
|> Repo.all()
|> how_do_you_get_tuple()
|> elem(1)
您的 Ecto 架构中是否有 Link 的虚拟字段?如果没有,您需要添加它:
field(:click_count, :integer, virtual: true)
那么你的 select 可能看起来像这样:
select: %{l | click_count: count(l.id)}
由于您现在在 Link
结构中有一个 click_count
键,您可以放置该键并且仍然有一个 Links
列表。所以你应该能够访问 link.click_count
.