添加到每个可枚举的计算值
Add to each enumerable a calculated value
我正在尝试从数据库中获取“work_items”,计算一个值,将其添加到相应的 work_item 然后继续,但我不明白为什么它没有工作:
import Ecto.query, warn: false
def list_work_items do
WorkItem
|> select_merge([work_item], %{value: ^work_item_value(work_item)})
|> Repo.all()
end
defp work_item_value(work_item) do
work_item.duration_in_minutes/60 * work_item.hourly_rate_in_cents
end
当我 运行 mix phx.server
我得到:
warning: variable "work_item" does not exist and is being expanded to "work_item()", please use parentheses to remove the ambiguity or change the variable name
lib/fourty/tracking.ex:22: Fourty.Tracking.list_work_items/0
== Compilation error in file lib/fourty/tracking.ex ==
** (CompileError) lib/fourty/tracking.ex:22: undefined function work_item/0
...
22
是 select_merge
.
我有 googelt 并尝试了文档,但无法弄清楚为什么它不起作用。帮助将不胜感激。
我想通了 - 解决方案是使用虚拟字段:
field :value, :float, virtual: true
然后使用:
def list_work_items do
WorkItem
|> select_merge([work_item], %{value: fragment("?/60 * ?"), work_item.duration_in_minutes, work_item.hourly_rate_in_cents})
|> Repo.all()
end
我正在尝试从数据库中获取“work_items”,计算一个值,将其添加到相应的 work_item 然后继续,但我不明白为什么它没有工作:
import Ecto.query, warn: false
def list_work_items do
WorkItem
|> select_merge([work_item], %{value: ^work_item_value(work_item)})
|> Repo.all()
end
defp work_item_value(work_item) do
work_item.duration_in_minutes/60 * work_item.hourly_rate_in_cents
end
当我 运行 mix phx.server
我得到:
warning: variable "work_item" does not exist and is being expanded to "work_item()", please use parentheses to remove the ambiguity or change the variable name
lib/fourty/tracking.ex:22: Fourty.Tracking.list_work_items/0
== Compilation error in file lib/fourty/tracking.ex ==
** (CompileError) lib/fourty/tracking.ex:22: undefined function work_item/0
...
22
是 select_merge
.
我有 googelt 并尝试了文档,但无法弄清楚为什么它不起作用。帮助将不胜感激。
我想通了 - 解决方案是使用虚拟字段:
field :value, :float, virtual: true
然后使用:
def list_work_items do
WorkItem
|> select_merge([work_item], %{value: fragment("?/60 * ?"), work_item.duration_in_minutes, work_item.hourly_rate_in_cents})
|> Repo.all()
end