生成后未定义控制器

时间:2018-08-10 12:01:29

标签: elixir phoenix

刚开始使用Phoenix时,我生成了项目并运行phoenix.gen.json Todo todos description:string

/lib/test_web/router.ex

# Other scopes may use custom stacks.
      scope "/api", TestWeb do
        pipe_through :api

        resources "/todos", TodoController, except: [:new, :edit]
      end

/web/controllers/todo_controller.ex

defmodule Test.TodoController do
  use Test.Web, :controller

  alias Test.Todo

  def index(conn, _params) do
    todos = Repo.all(Todo)
    render(conn, "index.json", todos: todos)
  end
end

到/ api / todos的GET给出500-**(UndefinedFunctionError)函数TestWeb.TodoController.init / 1是未定义的(模块TestWeb.TodoController不可用)

2 个答案:

答案 0 :(得分:1)

您的路由器和控制器期望控制器使用两个不同的父模块。您让路由器在“ TestWeb”(请参见范围)下查找控制器,但是您的控制器说它是“ Test.TestController”而不是“ TestWeb.TestController”。

一种解决方案是将scope "/api", TestWeb do更改为scope "/api", Test do

另一种选择是将defmodule Test.TodoController do更改为defmodule TestWeb.TodoController do

这实际上是一个优先事项(尽管遵循生成器的约定可能很好)。

答案 1 :(得分:0)

使用相同版本的生成器(phx.gen.json)。原来的生成器正在定义超出项目范围的模块。

切换到新的发电机后工作。