【问题标题】:Ecto Queryable not implemented for Phoenix modulePhoenix 模块未实现 Ecto Queryable
【发布时间】:2018-12-10 23:07:09
【问题描述】:

我正在关注 Programming Phoenix 1.4 教程并遇到了一个问题,我被告知 Ecto Queryable 未针对给定模块实现,但我不知道为什么。 SO上有另一个与此类似的问题,但它有一个简单的答案,不适用于我的情况。

我的lib/rumbl/accounts/user.ex 文件中有这段代码:

defmodule Rumbl.Accounts.User do
  use Ecto.Schema
  import Ecto.Changeset

  schema "users" do
    field :name, :string
    field :username, :string

    timestamps()
  end
end

这是我的lib/rumbl/accounts/accounts.ex 文件中的代码:

defmodule Rumbl.Accounts do
  @moduledoc """
  The Accounts context.
  """

  alias Rumbl.Accounts.User
  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

但是,当我从 UserController 调用 Rumbl.Accounts.list_users 时,我收到以下错误:

** (Protocol.UndefinedError) protocol Ecto.Queryable not implemented for Rumbl.Accounts.User, the given module does not provide a schema. This protocol is implemented for: Atom, BitString, Ecto.Query, Ecto.SubQuery, Tuple

当我在 mix -S iex 中运行相同的查询时,我没有收到相同的错误。

这可能是本书建议的代码中的错误,因为它处于测试阶段,但我终其一生都无法弄清楚出了什么问题。在另一篇 SO 帖子中,用户忘记了别名 Rumbl.Accounts.User,但这显然不是我的情况。

任何帮助将不胜感激!

【问题讨论】:

  • 当您在iex 中调用Rumbl.Repo.all(Rumbl.Accounts.User) 时会发生什么?
  • 没有错误,在iex中可以正常工作。
  • 是的,成功了!如果你回答我会接受它:)

标签: elixir phoenix-framework ecto


【解决方案1】:

您的代码是正确的,应该可以正常工作。该问题可以通过清理构建文件并重新编译代码来解决:

$ mix clean
$ mix compile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 2016-10-20
    • 2016-04-01
    • 2016-11-24
    • 2017-06-09
    • 2018-11-23
    • 2015-12-11
    相关资源
    最近更新 更多