routes - 带有两个参数的路由的未定义 [controller]_path

标签 routes phoenix-framework

我在我的 Phoenix 应用程序中创建了一个 Controller ,名为 ProgressController .这是我的路由器文件的样子:

defmodule MyTestApp.Router do
  use MyTestApp.Web, :router

  pipeline :api do
    plug :accepts, ["json"]
  end

  scope "/", MyTestApp do
    pipe_through :api

    get "/users/:user_id/courses/:course_id", ProgressController, :show
  end
end

当我跑 mix phoenix.routes它输出:
progress_path  GET   /users/:user_id/courses/:course_id  MyTestApp.ProgressController :show

我有以下测试,它使用 progress_path :

test "shows the user's progress in the given course", %{conn: conn} do
  # prepare some stuff
  conn = get conn, progress_path(conn, :show, %{user_id: 1, course_id: 7})
  # assert some stuff
end
progress_pathmix phoenix.routes 同名给了我,我很惊讶在运行我的测试时看到这个错误消息:

编译 11 个文件 (.ex)
** (CompileError) test/controllers/progress_controller_test.exs:12: undefined function progress_path/3
    (stdlib) lists.erl:1338: :lists.foreach/2
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
    (elixir) lib/code.ex:363: Code.require_file/2
    (elixir) lib/kernel/parallel_require.ex:57: anonymous fn/2 in Kernel.ParallelRequire.spawn_requires/5

20:34:46.402 [error] GenServer #PID<0.242.0> terminating
** (CompileError) test/controllers/progress_controller_test.exs:12: undefined function progress_path/3
    (stdlib) lists.erl:1338: :lists.foreach/2
    (elixir) src/elixir_module.erl:113: :elixir_module.do_compile/5
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
    (elixir) src/elixir.erl:223: :elixir.erl_eval/3
    (elixir) src/elixir.erl:211: :elixir.eval_forms/4
    (elixir) src/elixir_compiler.erl:66: :elixir_compiler.eval_compilation/3
    (elixir) src/elixir_lexical.erl:17: :elixir_lexical.run/3
    (elixir) src/elixir_compiler.erl:30: :elixir_compiler.quoted/3
    (elixir) lib/code.ex:363: Code.require_file/2
    (elixir) lib/kernel/parallel_require.ex:57: anonymous fn/2 in Kernel.ParallelRequire.spawn_requires/5

我将问题缩小到该路由的 URL 中有 2 个参数这一事实,但我不知道如何实际解决此问题。我究竟做错了什么?

最佳答案

经过大量的搜索、尝试和错误,我发现 path函数需要参数列表,而不是 Map .像这样:

conn = get conn, progress_path(conn, :show, 1, 7)

关于routes - 带有两个参数的路由的未定义 [controller]_path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39812524/

相关文章:

backbone.js - Backbone.js/Marionette.js 中的路由 - 没有主题标签、路由列表和子路由器

ruby-on-rails-3 - 资源中的命名路线带我显示页面而不是删除页面

asp.net-mvc - Controller 名是从类名派生的吗?

elixir - Phoenix Sessions 和 Phoenix.Token 的区别

javascript - Nextjs 页面刷新总是把我带到 index.js

elixir - 从 Phoenix router.ex 返回响应,无需 Controller

ssl - Phoenix 找不到 SSL key ,即使它存在于该位置

html - 如何在 eex 中将自定义 HTML 添加到功能链接 (Phoenix.HTML.link)

elixir - "Cannot begin test transaction because we are already inside one"

ruby-on-rails - 有没有办法通过命令行向 Rails 添加路由?