Как решить lib /.../ views / user_view.ex: 16: неопределенная функция user_path / 3 ошибка компиляции - PullRequest
1 голос
/ 09 апреля 2019

Попытка добавить User-View и User controller, но я получаю странную ошибку компиляции.

Из Программирование Phoenix: неопределенная функция 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 в папке views:

defmodule ChatterWeb.UserView do
  use ChatterWeb, :view
end

это раздел маршрутизации в моем маршрутизаторе.пример:

  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 вставляет код из другого файла, но из-за этого очень сложно точно определить, где именно происходит ошибка.

1 Ответ

2 голосов
/ 09 апреля 2019

Очевидно, ex:16 в lib/chatter_web/views/user_view.ex:16 фактически относится к lib/chatter_web/templates/user/index.html.eex. Я не понимаю почему. Но в этом файле я ссылаюсь на user_path (@conn,: show, user), когда это должен быть Routes.user_path (@conn,: show, user). Узнал это от Undefined [controller] _path для маршрута с двумя параметрами (я полагаю, это связано с документацией 1.4.3)

...