没有身份

时间:2016-08-15 03:53:35

标签: ecto

在没有embeds_many / id字段的情况下,有没有办法在Ecto中使用primary_key

我的数据库依赖于在此字段上具有唯一索引,并且ecto自动插入密钥会破坏此要求。

1 个答案:

答案 0 :(得分:3)

是。 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