Ayr*_*nna 5 elixir phoenix-framework
我正在按照这本书构建一个简单的应用程序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
Run Code Online (Sandbox Code Playgroud)
我已经仔细检查过,不认为我错过了任何内容或有任何拼写错误。
这是我的控制器:
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
Run Code Online (Sandbox Code Playgroud)
和用户模型:
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
Run Code Online (Sandbox Code Playgroud)
如果有人想探索,这里是存储库链接:https ://github.com/niranjans/rumbl
你的拼写错误是alias Rubml.Accounts.User——Rubml应该是Rumbl。(我想我在读完那本书时也犯了同样的错误)。
结论应该是,当找不到模块时:
lib/目录内 - 默认情况下,仅编译某些目录,因此请确保您的文件位于正确的位置