使用字符串查询仓库

Kom*_*mbo 5 elixir ecto phoenix-framework

我正在使用 Phoenix 和 Ecto 通过主键查询数据库中的单个记录。所有文档/示例都显示了在 Phoenix 控制器中的用法:

def show(conn, %{"id" => id}) do
  m = Repo.get(MyModel, id)

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

然而,Phoenix 中的所有参数都是字符串,所以这会抛出一个** (Ecto.InvalidModel) model App.MyModel failed validation when , field id had type string but type integer was expected. 我一直在我的控制器中通过执行以下操作来解决此问题:

def show(conn, %{"id" => id}) do
   m = String.to_integer(id) |> find_my_model_by_id

  ...
end

defp find_my_model_by_id(id) do
 Repo.get(MyModel, id)
end
Run Code Online (Sandbox Code Playgroud)

问题是我还没有看到其他人进行这种类型转换。我担心我没有正确设置 Phoenix 或 Ecto。是否有我缺少的 Phoenix/Ecto 约定会自动将我的 id 参数强制Repo.get/2转换为 int?

Jos*_*lim 0

你的代码是正确的。在即将推出的 Ecto 版本中,我们希望为此类情况添加自动转换。但目前,您需要手动投射。