Ecto 查询 from 的第二个参数必须是编译时关键字列表

Ecto query second argument to from must be a compile time keyword list

defmodule Arcade.TemplateMedia do
  use Ecto.Schema
  import Ecto.{Changeset, Query}


 def for_template_id(query \ MODULE, t_id) do
    from u in query,
    where u.template_id == ^t_id
  end



== Compilation error in file lib/arcade/template_media.ex ==
** (ArgumentError) second argument to from must be a compile time keyword list

我正在尝试使用此函数传递给 Repo.all()

我不明白这个错误。我在另一个项目中有相同类型的代码没有问题。这是版本之间的 Ecto 语法问题吗?在我看来很简单。我错过了什么?

在您编写的代码中,from 的第二个参数是这部分:where u.template_id == ^t_id。 ArgumentError 试图告诉您将其转换为关键字列表。你可以像 [{:where, u.template == ^t_id}] 这样冗长地写,但大多数人会这样写:

def for _template_id(query \ __MODULE__, t_id) do
  from u in query,
  where: u.template_id == ^t_id
end

这就是说您忘记了 where 后的冒号。