【问题标题】:Error: undefined function user/2 when running mix phoenix.server错误:运行 mix phoenix.server 时未定义的函数 user/2
【发布时间】:2019-12-19 16:40:10
【问题描述】:

我创建了这个模块:

defmodule Discuss.Topic do
    user Discuss.Web, :model

    schema "topics" do
        field :title, :string
    end

    def changeset(struct, params \\ %{}) do
        struct
        |> cast(params, [:title])
        |> validate_required([:title])
    end
end

我在使用mix phoenix.server时遇到了这个错误

== Compilation error in file web/models/topic.ex ==
** (CompileError) web/models/topic.ex:2: undefined function user/2
    (stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
    (elixir) lib/kernel/parallel_compiler.ex:229: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/7

知道发生了什么吗?我是 Phoenix 和 Elixir 的新手。

【问题讨论】:

  • 旁注:考虑使用formatter,缩进4个空格不习惯;这使得代码更难阅读。

标签: elixir phoenix-framework phoenix


【解决方案1】:
user Discuss.Web, :model
   ^
   |
  here

应该是

use Discuss.Web, :model

更新

由于“web”应该是一个仅卸载 HTTP 和 WebSocket 的薄层,并将作业委托给底层业务逻辑,Phoenix 不再将模型视为 web 层的一部分。所以你应该use Ecto.Schema而不是use Discuss.Web, :model

顺便说一下,Web 层现在只包含控制器、视图、通道和路由器。

【讨论】:

  • 你应该得到 1000 个赞。我一遍又一遍地阅读这些文件,试图找出任何错别字……谢谢!
  • 顺便说一句,当前的 Phoenix 框架并没有将模型(或者我应该说模式)视为“web”的固定部分,所以您可以简单地 use Ecto.Schema 代替 use Discuss.Web, :model .
  • @AdautoPinheiro 如果答案有帮助,您应该用绿色复选标记(在分数下方)标记它。
猜你喜欢
  • 2015-07-06
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 2017-11-14
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
相关资源
最近更新 更多