elixir - 编译错误 - User.__struct__/1 未定义,无法扩展 struct User

标签 elixir phoenix-framework phoenix

我正在按照 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

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

这是我的 Controller :
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

如果有人想探索,这里是 repo 链接:https://github.com/niranjans/rumbl

最佳答案

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

外卖应该是当找不到模块时:

  • 使用区分大小写的搜索对模块名称的拼写/大写进行三重检查。
  • 选择一个对别名友好的命名约定——留意其段与模块命名相同的别名。
  • 关于elixir - 编译错误 - User.__struct__/1 未定义,无法扩展 struct User,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61732637/

    相关文章:

    java - 带有 Phoenix 的MapReduce:org.apache.hadoop.io.LongWritable无法转换为org.apache.hadoop.io.NullWritable

    performance - 如何微调牛仔的运行时行为?

    hadoop - 带有Spark 1.3.1的Apache phoenix 4.5.1 ClassNotFoundException

    hbase - Google Cloud Bigtable 协处理器支持

    erlang - 获取任意整数的大小(以字节为单位)

    layout - 如何在没有布局的情况下呈现 Controller Action ?

    elixir - Ecto:使用 has_many 关联订购集合中的预加载数据

    erlang - 尝试在 Amazon Linux 2 上运行时获取 "Unusable Erlang runtime system!"

    elixir - 在测试过程中丢失 conn.assigns

    erlang - 在 Elixir 中创建大小为 n 的默认初始化列表