编译错误 - User.__struct__/1 未定义,无法扩展结构用户

Compile Error - User.__struct__/1 is undefined, cannot expand struct User

我正在按照 Programming Phoenix 1.4 这本书构建一个简单的应用程序。

在添加逻辑以创建新用户时,出现此错误:

== Compilation error in file lib/rumbl_web/controllers/user_controller.ex ==
** (CompileError) lib/rumbl_web/controllers/user_controller.ex:19: Rubml.Accounts.User.__struct__/1 is undefined, cannot expand struct Rubml.Accounts.User. Make sure the struct name is correct. If the struct name exists and is correct but it still cannot be found, you likely have cyclic module usage in your code
    (stdlib 3.12.1) lists.erl:1354: :lists.mapfoldl/3
    lib/rumbl_web/controllers/user_controller.ex:18: (module)
    (stdlib 3.12.1) erl_eval.erl:680: :erl_eval.do_apply/6

我已经仔细检查过,我认为我没有遗漏任何内容或有任何拼写错误。

这是我的控制器:

defmodule RumblWeb.UserController do
    use RumblWeb, :controller

    alias Rumbl.Accounts
    alias Rubml.Accounts.User

    def index(conn, _params) do
        users = Accounts.list_users()
        # IO.puts users
        render(conn, "index.html", users: users)
    end

    def show(conn, %{"id" => id}) do
        user = Accounts.get_user(id)
        render(conn, "show.html", user: user)
    end

    def new(conn, _params) do
        changeset = Accounts.change_user(%User{})
        render(conn, "new.html", changeset: changeset)
    end
end

和用户模型:


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

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

        timestamps()
    end

    def changeset(user, attrs) do
        user
        |> cast(attrs, [:name, :username])
        |> validate_required([:name, :username])
        |> validate_length(:username, min: 1, max: 20)
    end
end

这里是回购 link 如果有人想探索:https://github.com/niranjans/rumbl

您在 alias Rubml.Accounts.User 中有错字 -- Rubml 应该是 Rumbl。 (我想我在读那本书时犯了同样的错误)。

要点应该是当找不到模块时:

  1. 使用区分大小写的搜索对模块名称的 spelling/capitalization 进行三次检查。
  2. 选择一个对别名友好的命名约定——留意其段与模块同名的别名。

我把文件放在错误的路径下:rumbl/accounts/user.ex 而不是 rumbl/lib/rumbl/accounts/user.ex

然后退出再进入iex -S mix

(我是 运行 mix phx.server 在后台,但如果它有所不同,我知道)