elixir - Ecto.Queryable 未针对用户/Phoenix 错误实现

标签 elixir phoenix-framework ecto

遵循Programming Phoenix 1.4一书。当我使用手动数据库时,该模块工作正常,但是当我尝试切换我的accounts.ex文件时(就像书上告诉我的那样),它坏了:

defmodule Rumbl.Accounts do
  alias Rumbl.Repo

  def get_user(id) do
    Repo.get(User, id)
  end

  def get_user!(id) do
    Repo.get!(User, id)
  end

  def get_user_by(params) do
    Repo.get_by(User, params)
  end

  def list_users do
    Repo.all(User)
  end
end

以下是更改 account.ex 文件时出现的完整错误:

[error] #PID<0.732.0> running RumblWeb.Endpoint (connection #PID<0.731.0>, stream id 1) terminated
Server: localhost:4000 (http)
Request: GET /users
** (exit) an exception was raised:
    ** (Protocol.UndefinedError) protocol Ecto.Queryable not implemented for User, the given module does not exist. This protocol is implemented for: Atom, BitString, Ecto.Query, Ecto.SubQuery, Tuple
        (ecto) lib/ecto/queryable.ex:40: Ecto.Queryable.Atom.to_query/1
        (ecto) lib/ecto/repo/queryable.ex:14: Ecto.Repo.Queryable.all/3
        (rumbl) lib/rumbl_web/controllers/user_controller.ex:7: RumblWeb.UserController.index/2
        (rumbl) lib/rumbl_web/controllers/user_controller.ex:1: RumblWeb.UserController.action/2
        (rumbl) lib/rumbl_web/controllers/user_controller.ex:1: RumblWeb.UserController.phoenix_controller_pipeline/2
        (rumbl) lib/rumbl_web/endpoint.ex:1: RumblWeb.Endpoint.instrument/4
        (phoenix) lib/phoenix/router.ex:275: Phoenix.Router.__call__/1
        (rumbl) lib/rumbl_web/endpoint.ex:1: RumblWeb.Endpoint.plug_builder_call/2
        (rumbl) lib/plug/debugger.ex:122: RumblWeb.Endpoint."call (overridable 3)"/2
        (rumbl) lib/rumbl_web/endpoint.ex:1: RumblWeb.Endpoint.call/2
        (phoenix) lib/phoenix/endpoint/cowboy2_handler.ex:34: Phoenix.Endpoint.Cowboy2Handler.init/2

最佳答案

Ecto.Queryable not implemented for User, the given module does not exist.

错误非常明显,这意味着您没有名为 User 的模块(在您的应用程序中可能是 Rumbl.UserRumbl.Accounts.User)。

假设您确实创建了 ecto 模式 Rumbl.User ,你应该:

  1. 要么alias它在您使用的模块中:

    alias Rumbl.User
    
  2. 或使用模块的完全限定名称:

    Repo.get(Rumbl.User, id)
    

关于elixir - Ecto.Queryable 未针对用户/Phoenix 错误实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53466494/

相关文章:

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

elixir - 获取 escript 可执行文件的源代码

elixir - Repo.update成功后,Ecto重新加载belongs_to关联

elixir - 使用模式之间建立关联

elixir - Kernel.--/2 奇怪的行为

installation - 混合phoenix.server(启动)>被杀死(phoenix服务器无法启动)

javascript - 从字符串解析对象时,JSON 中出现意外的标记 &

elixir - 向对象添加虚拟字段

elixir - 如何预加载关联并在 ecto 中返回它?

elixir - 在 Phoenix/Ecto 中混合范围和关联