繁体   English   中英

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

[英]Automatically set a virtual field in an Ecto.Schema on an Ecto.Query

在链接时间的本次演讲中,演讲者描述了如何通过像这样的转换 function 管道化变更集,基于虚拟字段自动设置 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。

我该如何做另一个方向? 当我从Repo查询Track时,虚拟字段duration_stringnil 如何安装 function 以在查询某个结构的架构时自动计算和设置虚拟字段?

根据您的需要,您可以将任何此类计算字段添加到您的序列化程序(例如defimpl Jason.Encoder ),或者您可以在抽象模块中定义必要的装饰(例如在 Phoenix 上下文中)。 来自 Elixir 论坛的讨论可能是相关的: https://elixirforum.com/t/computed-fields-for-an-ecto-model/3537/12

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM