小编Ben*_*tes的帖子

如何添加条件必填字段?

我有一个带有这个(简化)模式的地址的ecto模型:

defmodule Address do
  use Ecto.Model

  schema "addresses" do
    field :zip, :string
    field :country, :string
    # snip
  end

  @countries_requiring_zip ~w(US) # snip

  def changeset(model, params \\ :empty) do
    model
    |> cast(params, ~w(country), ~w(zip))
    |> validate_zip
  end

  defp validate_zip(changeset) do
    if get_field(changeset, :country) in @countries_requiring_zip do
      # ????
    end

    changeset
  end
end
Run Code Online (Sandbox Code Playgroud)

我想标记zip为必需而不是可选,但仅当国家/地区是白名单时,但我无法找到一种干净的方式来编写验证.如何添加该约束?

elixir ecto phoenix-framework

10
推荐指数
1
解决办法
1136
查看次数

我在哪里存储PID以进行长时间运行的子进程?

我正在编写一个使用Exredis作为数据库的简单Web应用程序.Exredis文档说要初始化客户端:

{:ok, conn} = Exredis.start_link
Run Code Online (Sandbox Code Playgroud)

我的问题是,我在哪里放conn?现在,我正在调用Exredis.start_link\1每个需要进行数据库查询的函数的顶部,但这样做既嘈杂又低效.我可以通过conn,但这只是将问题转移到我的路由器.

我想在我的主应用程序启动时启动它,并在我的应用程序中重复使用单个连接.我可以将它作为工作人员添加到我的主管,但我无法弄清楚如何在我的应用程序的其余部分访问PID.

elixir

4
推荐指数
1
解决办法
445
查看次数

Ecto 架构字段名称可以与列名称不同吗?

我有一个旧数据库,我正试图将其引入 Ecto。其中有一个orders表,其中有一order_status_id列。 order_status_id映射到遗留系统中的一组常量。

我想让MyApp.Order结构包含一个order_status字段,它有一个自定义类型,可以将整数 ID 转换为有意义的原子。我有自定义类型工作,但我无法弄清楚如何将名为的字段映射order_status到名为order_status_id.

遗留系统仍然在线并使用数据库,因此更改数据库架构不是一种选择。有没有办法让这个工作?

elixir ecto

1
推荐指数
1
解决办法
1927
查看次数

标签 统计

elixir ×3

ecto ×2

phoenix-framework ×1