Elixir Using has_many-在使用UUID(字符串)时属于关联
我试图将两个模型(用户和国家)关联起来,其中: ·一个国家有很多用户 ·用户属于一个国家/地区 另外,我使用UUID作为这两个模型的主键,因此我没有:id类型来关联它们,只有字符串来关联它们。 国家是静态的,但我会创建很多用户 我应该如何将这两个模型联系起来,以及我应该在模式中的两个函数中写入哪些参数(has_many&归属)?我应该调用哪个函数来关联它们:cast\u assoc、build\u assoc或put\u assoc 谢谢Elixir Using has_many-在使用UUID(字符串)时属于关联,elixir,phoenix-framework,uuid,has-many,belongs-to,Elixir,Phoenix Framework,Uuid,Has Many,Belongs To,我试图将两个模型(用户和国家)关联起来,其中: ·一个国家有很多用户 ·用户属于一个国家/地区 另外,我使用UUID作为这两个模型的主键,因此我没有:id类型来关联它们,只有字符串来关联它们。 国家是静态的,但我会创建很多用户 我应该如何将这两个模型联系起来,以及我应该在模式中的两个函数中写入哪些参数(has_many&归属)?我应该调用哪个函数来关联它们:cast\u assoc、build\u assoc或put\u assoc 谢谢 @primary_key {:uuid, :stri
@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
您可以在
所属的中传递:type选项:
belongs_to :country, UserManagement.Country, references: :uuid, type: :string
所有的协会职能和助手都应该发挥作用。您可以在此处找到所有可用选项:
如果希望所有模式都使用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
现在,如果您使用的是Jose Valim提供的公认答案,并且您还在自定义模式@primary\u key
上设置了autogenerate:true
,而不是使用异位.Schema
,那么您确实需要MyApp.Schema
模块使用type异位.UUID
这看起来像:
@primary_key {:uuid, Ecto.UUID, autogenerate: true}
如果没有,使用此基本架构的架构将抛出(ArgumentError)字段:uuid不支持:autogenerate,因为它使用了一个基本类型:string
,非常感谢!这个“用法”实现起来也很有趣!
@primary_key {:uuid, Ecto.UUID, autogenerate: true}