尝试添加用户视图和用户控制器,但我收到一个奇怪的编译错误。
从查看编程凤凰:未定义的函数 page_path/2 我怀疑这也与生成的文件有关,但我仍然不明白如何解决它
这是我在控制器文件夹中的 user_controller.ex:
defmodule ChatterWeb.UserController do
use ChatterWeb, :controller
alias Chatter.User
def index(conn, _params) do
users = Repo.all(User)
render(conn, "index.html", users: users)
end
end
这是我在视图文件夹中的 user_view.ex:
defmodule ChatterWeb.UserView do
use ChatterWeb, :view
end
这是我的路由器中的路由部分.ex:
scope "/", ChatterWeb do
pipe_through :browser
resources "/users", UserController
get "/", PageController, :index
end
这是我的用户.ex(具有架构(:
defmodule Chatter.User do
use Ecto.Schema
import Ecto.Changeset
schema "users" do
field :email, :string
field :encrypt_pass, :string
field :password, :string, virtual: true
timestamps()
end
@doc false
def changeset(user, attrs) do
user
|> cast(attrs, [:email, :password])
|> validate_required([:email, :password])
|> unique_constraint(:email)
end
end
这是我在编译时遇到的错误:
== Compilation error in file lib/chatter_web/views/user_view.ex ==
** (CompileError) lib/chatter_web/views/user_view.ex:16: undefined function user_path/3
(elixir) src/elixir_locals.erl:107: :elixir_locals."-ensure_no_undefined_local/3-lc$^0/1-0-"/2
(elixir) src/elixir_locals.erl:107: anonymous fn/3 in :elixir_locals.ensure_no_undefined_local/3
(stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
(elixir) lib/kernel/parallel_compiler.ex:208: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6
我不明白为什么如果文件只有 3 行代码,为什么会说ex:16
。我猜 use
关键字会从不同的文件注入代码,但这很难确定它到底出了什么问题。
,lib/chatter_web/views/user_view.ex:16
中的ex:16
实际上指的是lib/chatter_web/templates/user/index.html.eex
。我不明白为什么。但是在该文件中,我指的是user_path(@conn,:show,user(,而它应该是Routes.user_path(@conn,:show,user(。从未定义的 [控制器]_path 中学到了这一点,用于带有两个参数的路由(我相信这是由于 1.4.3 文档(