编译错误 - 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
。 (我想我在读那本书时犯了同样的错误)。
要点应该是当找不到模块时:
- 使用区分大小写的搜索对模块名称的 spelling/capitalization 进行三次检查。
- 选择一个对别名友好的命名约定——留意其段与模块同名的别名。
我把文件放在错误的路径下:rumbl/accounts/user.ex
而不是 rumbl/lib/rumbl/accounts/user.ex
然后退出再进入iex -S mix
(我是 运行 mix phx.server
在后台,但如果它有所不同,我知道)
我正在按照 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
。 (我想我在读那本书时犯了同样的错误)。
要点应该是当找不到模块时:
- 使用区分大小写的搜索对模块名称的 spelling/capitalization 进行三次检查。
- 选择一个对别名友好的命名约定——留意其段与模块同名的别名。
我把文件放在错误的路径下:rumbl/accounts/user.ex
而不是 rumbl/lib/rumbl/accounts/user.ex
然后退出再进入iex -S mix
(我是 运行 mix phx.server
在后台,但如果它有所不同,我知道)