Ecto:自定义binary_id

hyd*_*yde 3 elixir ecto

我有一个 Ecto 模型,我想将其存储在数据库中,并使用 elixir 函数生成的自定义 binary_id 。这可能吗?

我的 id 函数如下所示:

def gen_id
    String.upcase to_string Enum.take_random('abcdefghjkmnpqrstuvwxyz123456789', 8)
end
Run Code Online (Sandbox Code Playgroud)

我的架构如下所示:

schema "orders" do
    belongs_to :type, Invoicer.Customer
    @primary_key {:id, :binary_id, autogenerate: true}
    field :order_details, :string

    timestamps()
end
Run Code Online (Sandbox Code Playgroud)

Jus*_*ood 5

您应该按照该行为实现您自己的类型Ecto.Type

在该类型中,您可以添加一个autogenerate/0函数(即您的gen_id函数)来为您生成 id。

要查看类似的完整示例,您可以查看Ecto.UUID其中包含您在这里要求的所有内容。