在Ecto.Query的Ecto.Schema中自动设置虚拟字段

问题描述 投票:1回答:1

在链接时间的this talk中,演讲者描述了如何通过虚拟转换(例如,通过转换函数)将变更集管道化,从而基于虚拟字段自动在Ecto.Schema中设置字段:

defmodule MusicDb.Track do
  use Ecto.Schema

  schema "tracks" do
    field :title, :string
    field :duration, :integer
    field :duration_string, :string, virtual: true

    timestamps()
  end

  def changeset(track, attrs) do
    track
    |> validate...
    |> convert_duration_string
  end
end

例如,这用于将3:25的用户输入转换为205。

我如何做另一个方向?当我从Track查询Repo时,虚拟字段duration_stringnil。查询特定结构的架构时,如何安装自动计算和设置虚拟字段的功能?

elixir ecto
1个回答
0
投票

取决于您需要的位置,您可以将任何这样的计算字段添加到序列化程序中(例如defimpl Jason.Encoder),也可以在抽象模块中定义必要的修饰(例如在Phoenix环境中)。 Elixir论坛中的讨论可能是相关的:https://elixirforum.com/t/computed-fields-for-an-ecto-model/3537/12

© www.soinside.com 2019 - 2024. All rights reserved.