有没有什么方法可以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)
| 归档时间: |
|
| 查看次数: |
1127 次 |
| 最近记录: |