Elixir 使用查询参数筛选json结果

Elixir 使用查询参数筛选json结果,elixir,phoenix-framework,crud,Elixir,Phoenix Framework,Crud,我尝试创建一个RESTAPI,允许用户使用用户名和电子邮件过滤或创建请求 第一个URL返回完整的用户列表 第二个应该对数据进行拟合 我尝试用两种方法来解决这个问题: def index(conn, _params) do users = Res.list_users() render(conn, "index.json", users: users) end def search_user(username, email) do Repo.one(fro

我尝试创建一个RESTAPI,允许用户使用用户名和电子邮件过滤或创建请求

第一个URL返回完整的用户列表

第二个应该对数据进行拟合

我尝试用两种方法来解决这个问题:

  def index(conn, _params) do
    users = Res.list_users()
    render(conn, "index.json", users: users)
  end

  def search_user(username, email) do
    Repo.one(from t in User, where: t.username == username and t.email == email, select: t, limit: 1)
    render(conn, index.json, users: users)
  end
它在运行时返回一个错误:

controllers/user_controller.ex:15: undefined function from/2
Console output is shown below.
Compiling 1 file (.ex)

== Compilation error in file lib/app_web/controllers/user_controller.ex ==
** (CompileError) lib/app_web/controllers/user_controller.ex:15: undefined function from/2
    (elixir) src/elixir_locals.erl:108: :elixir_locals."-ensure_no_undefined_local/3-lc$^0/1-0-"/2
(elixir) src/elixir_locals.erl:108: anonymous fn/3 in :elixir_locals.ensure_no_undefined_local/3
(stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
(elixir) lib/kernel/parallel_compiler.ex:229: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/

谢谢

如果要保持端点不变,可以执行以下操作

def index(conn, %{"username" => username, "email" => email}) do
  users = Repo.one(from t in User, where: t.username == ^username and t.email == ^email, select: t, limit: 1)
  render(conn, "filter.json", users: users)
end
def index(conn, _params) do
  users = Res.list_users()
  render(conn, "index.json", users: users)
end

现在,当您有用户名和电子邮件参数时,以及当您没有这两个参数时,这将处理该场景。

您需要导入EXTO.Query,以便能够访问from/2宏。您还需要使用t.username==^username和t.email==^email。您可以删除select:t部分,因为这是自动的。您也没有分配Repo.one/2,并且当前在该范围内没有用户变量。是的,您是对的!我更新了上面的代码,但我仍然有一个问题。谢谢你帮助我的进步=您正在使用相同的端点。您需要将search_user的设置更改为/api/users/search或其他。你会希望在你的router.ex文件中这样做。即使这不是你想要的,我也会这样做…你不能根据你得到的建议修改问题。最初的问题应该保持不变,以便将来的访问者了解上下文。