Ecto embeds_many 没有 id

Ben*_*ith 4 ecto

有没有什么方法可以embeds_many在没有id/primary_key字段的情况下在 Ecto 中使用?

我的数据库依赖于在这个字段上有一个唯一的索引,而 ecto 自动插入键打破了这个要求。

小智 6

是的。Postgres 中的 embeds_many 最终是一个 JSON 数组。定义一个表示 JSON 数据的模块,并在embedded_schema 的定义中使用@primary_key false。例如,假设您想在每一行上存储一个键/值对数组。我们称它们为标签。您可以像下面那样定义它,并且在数组中的每个元素上都没有生成主键。您可以在该架构中拥有另一个字段,该字段将以对您的应用程序有意义的任何方式填充。

  defmodule MyApp.Tag do
  use MyApp.Web, :model

  @primary_key false
  embedded_schema do
    field :key, :string
    field :value, :string
  end

  def changeset(struct, params \\ %{}) do
    struct
    |> cast(params, [:key, :value])
    |> validate_required([:key])
  end
end
Run Code Online (Sandbox Code Playgroud)