elixir - 如何解决 lib/.../views/user_view.ex:16: undefined function user_path/3 编译错误
问题描述
试图添加一个用户视图和用户控制器,但我得到一个奇怪的编译错误。
通过查看Programming Phoenix: undefined function 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
这是我的 router.ex 中的路由部分:
scope "/", ChatterWeb do
pipe_through :browser
resources "/users", UserController
get "/", PageController, :index
end
这是我的 user.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
我不明白为什么ex:16
文件只有 3 行代码。我猜这个use
关键字会从不同的文件中注入代码,但这使得很难确定它到底哪里出了问题。
解决方案
显然,ex:16
inlib/chatter_web/views/user_view.ex:16
实际上是指lib/chatter_web/templates/user/index.html.eex
. 我不明白为什么。但是在那个文件中,当它应该是 Routes.user_path(@conn, :show, user) 时,我指的是 user_path(@conn, :show, user)。从Undefined [controller]_path for route with two params了解到这一点(我相信这是由于 1.4.3 文档)
推荐阅读
- azure - Databricks Connect:无法连接到 azure 上的远程集群,命令:“databricks-connect test”停止
- laravel - 子类别未显示在管理面板上
- python - 函数不返回 pyspark DataFrame
- android - 为什么 continueStroke 函数不起作用
- android - 当用户单击网页中的按钮时,将数据从 Trusted Web Activity 保存在内部存储中
- android - 如何以编程方式在android中获取状态启用或禁用自动启动权限
- linux - 使用正则表达式进行 Grep 并使用组进行捕获
- java - 我的查询有什么问题??它完全没有错误
- c# - 使用 P/Invoke 传递取消标志时是否需要同步?
- c# - 如何在 ASP.NET MVC 中使用实体框架向数据库添加条目?