gpt4 book ai didi

elixir - 使用 UUID(字符串)时使用 has_many - belongs_to 关联

转载 作者:行者123 更新时间:2023-12-04 15:44:26 29 4
gpt4 key购买 nike

我正在尝试关联两个模型(用户和国家/地区),其中:

· 一个国家有_很多用户。

· 一个用户属于_一个国家。

另外,我使用 UUID 作为这两个模型的主键,所以我没有 :id 类型来关联它们,只有字符串来关联它们。这些国家/地区是静态的,但我会创建很多用户。

我应该如何关联这两个模型以及我应该在模式(has_many 和 belongs_to)的两个函数中写入哪些参数?我应该调用哪个函数来关联它们:cast_assoc、build_assoc 或 put_assoc?

谢谢!!

  @primary_key {:uuid, :string, []}
@derive {Phoenix.Param, key: :uuid}
schema "countries" do
field :country_name, :string

has_many :users, UserManagement.User, foreign_key: :country_id
end
  @primary_key {:uuid, :string, []}
@derive {Phoenix.Param, key: :uuid}
schema "users" do
field :nickname, :string
field :password, :string, virtual: true

belongs_to :country, UserManagement.Country, references: :uuid

timestamps()
end

最佳答案

您可以在 belongs_to 中传递 :type 选项:

belongs_to :country, UserManagement.Country, references: :uuid, type: :string

并且所有的关联函数和助手都应该工作。您可以在此处找到所有可用选项:https://hexdocs.pm/ecto/Ecto.Schema.html#belongs_to/3


如果您希望所有模式都使用 UUID,您可以将设置封装在自定义模块中,如下所示:

defmodule MyApp.Schema do
defmacro __using__(_) do
quote do
use Ecto.Schema
@primary_key {:uuid, :string, []}
@foreign_key_type :string
@derive {Phoenix.Param, key: :uuid}
end
end
end

现在您可以使用 MyApp.Schema 而不是使用 Ecto.Schema

关于elixir - 使用 UUID(字符串)时使用 has_many - belongs_to 关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56475297/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com