在没有embeds_many
/ id
字段的情况下,有没有办法在Ecto中使用primary_key
?
我的数据库依赖于在此字段上具有唯一索引,并且ecto自动插入密钥会破坏此要求。
答案 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