视图中未定义的功能conn / 0

时间:2019-05-28 15:50:16

标签: elixir phoenix-framework

我正在阅读《编程Phoenix 1.4》一书,在为用户创建视图时遇到了一个问题。我不断收到编译错误提示

std::source_location

在尝试编译和运行项目时。 这是有问题的视图:

== Compilation error in file lib/rumbl_web/views/user_view.ex ==
** (CompileError) lib/rumbl_web/views/user_view.ex:3: undefined function conn/0
    (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:670: :erl_eval.do_apply/6
    (elixir) lib/kernel/parallel_compiler.ex:208: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6`

如果我在行defmodule RumblWeb.UserView do use RumblWeb, :view alias Rumbl.Accounts def first_name(%Accounts.User{name: name}) do name |> String.split(" ") |> Enum.at(0) end def username(%Accounts.User{username: username}) do username end end 上注释掉,则项目会编译(尽管由于明显的原因它无法呈现视图)。我对凤凰和长生不老药比较陌生,所以这非常令人困惑。

1 个答案:

答案 0 :(得分:-1)

如果我将conn添加到views/user_view.ex的第三行:

defmodule RumWeb.UserView do
  use RumWeb, :view
  conn  #====== *** HERE ***
  alias Rum.Accounts.User

  def first_name(%User{name: name} ) do
    name
    |> IO.inspect 
    |> String.split(" ")
    |> Enum.at(0)
  end


end

我得到的错误与您差不多:

$ mix phx.server
Compiling 9 files (.ex)
warning: variable "conn" does not exist and is being expanded to "conn()", please use parentheses to remove the ambiguity or change the variable name
  lib/rum_web/views/user_view.ex:3


== Compilation error in file lib/rum_web/views/user_view.ex ==
** (CompileError) lib/rum_web/views/user_view.ex:3: undefined function conn/0
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
    (elixir) lib/kernel/parallel_compiler.ex:198: anonymous fn/4 in Kernel.ParallelCompiler.spawn_workers/6

我的错误中间没有以下内容:

ensure_no_undefined_local/3-

但这可能是由于e剂版本不同所致。

如果我将conn放在rumbl_web.ex的任何位置,则错误指向rumbl_web.ex而不是user_view.ex。完成$ mix phx.server之后是否要发布所有输出?

您确定没有打开两个带有文件user_view.ex的两个不同版本的窗口吗?我将关闭您所有编辑器的窗口,然后重新打开您的项目并再次查看user_view.ex

我一次有一个奇怪的错误,解决方法是:

../rumbl$ rm -rf _build

然后做:

../rumbl$ mix phx.server 

混合使用将重建您的项目,并在此过程中重新创建_build目录。