Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 如何解决lib/../views/user\u view.ex:16:未定义的函数user\u path/3编译错误_Elixir_Phoenix Framework - Fatal编程技术网

Elixir 如何解决lib/../views/user\u view.ex:16:未定义的函数user\u path/3编译错误

Elixir 如何解决lib/../views/user\u view.ex:16:未定义的函数user\u path/3编译错误,elixir,phoenix-framework,Elixir,Phoenix Framework,试图添加用户视图和用户控制器,但我遇到了一个奇怪的编译错误 从外观上看,我怀疑这也与生成的文件有关,但我仍然不知道如何解决它 这是控制器文件夹中的我的用户\u controller.ex: defmodule ChatterWeb.UserController do use ChatterWeb, :controller alias Chatter.User def index(conn, _params) do users = Repo.all(User) ren

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

从外观上看,我怀疑这也与生成的文件有关,但我仍然不知道如何解决它

这是控制器文件夹中的我的用户\u 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
这是“视图”文件夹中的“我的用户”_view.ex:

defmodule ChatterWeb.UserView do
  use ChatterWeb, :view
end
这是my router.ex中的路由部分:

  scope "/", ChatterWeb do
    pipe_through :browser
    resources "/users", UserController
    get "/", PageController, :index
  end
这是my user.ex(具有架构):

这就是我在编译时遇到的错误:

== 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\u web/views/user\u view中的
ex:16
实际上指的是
lib/chatter\u web/templates/user/index.html.eex
。我不明白为什么。但在该文件中,我引用了user_path(@conn,:show,user),它应该是Routes.user_path(@conn,:show,user)。从中了解到这一点(我相信这是由于1.4.3文档)

通过在用户控制器、路由器和用户视图文件中将用户名更改为userp,一切正常。然而,当我将模板文件的名称从user改为userp时,我得到了文件lib/chatter\u web/views/user\u view.ex中的编译错误
=
,所以我很确定这与控制器上的渲染有关(我想),但这仍然不能解决任何问题,我刚刚收到另一个错误,即
无法为ChatterWeb.UserView呈现“index2.html”,请为render/2定义一个匹配子句,或在“lib/chatter\u web/templates/user”中定义一个模板。没有为此模块编译模板。
当我访问
localhost:4000/用户时
当然,正确命名文件会让我回到之前的错误,这要感谢@Schrockwell,“查看模块实际上使用了
.eex
文件,并使用宏的魔力将它们包装为模块中的普通旧函数。除了在模块中定义的任何函数之外。这就是为什么行号不可靠…它们指的是编译时生成的Elixir语法“
== 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