如何解析库/../views/user_view.ex:16:未定义的函数 user_path/3 编译错误



尝试添加用户视图和用户控制器,但我收到一个奇怪的编译错误。

从查看编程凤凰:未定义的函数 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 文档(

最新更新