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