Elixir 如何解决lib/../views/user\u view.ex:16:未定义的函数user\u path/3编译错误
试图添加用户视图和用户控制器,但我遇到了一个奇怪的编译错误 从外观上看,我怀疑这也与生成的文件有关,但我仍然不知道如何解决它 这是控制器文件夹中的我的用户\u controller.ex: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
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