elixir - Ecto:自定义 binary_id

标签 elixir ecto

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

我的 id 函数如下所示:

def gen_id
    String.upcase to_string Enum.take_random('abcdefghjkmnpqrstuvwxyz123456789', 8)
end

我的架构如下所示:

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

    timestamps()
end

最佳答案

你应该在 Ecto.Type 之后实现你自己的类型行为。

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

要查看此类的完整示例,您可以查看 Ecto.UUID这里有你要的一切。

关于elixir - Ecto:自定义 binary_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41749936/

相关文章:

Elixir Ecto 仅在创建时添加计算值

docker - 在 Docker 容器/静默安装的 Ubuntu 20.04 上安装 Erlang/Elixir

elixir - 如何将关联传递给 Ecto 中的变更集?

elixir - 如何在 Phoenix 应用程序中设置 conn.secret_key_base

unit-testing - 如何在没有模拟的情况下记录/验证单元测试中的方法调用?

elixir - 在 Phoenix/Plug/Cowboy 中重写 URL?

postgresql - Phoenix 无法连接到 Heroku 的 PostgreSQL 服务器

elixir - 如何将 Ecto 选择查询转换为 Phoenix 中的结构?

mocking - 如何在 Elixir 库 Ecto/Repo 中模拟/ stub 方法?

postgresql - 使用 Ecto 查询对 jsonb 列中的字段求和