Эликсир Феникс.Route.NoRouteError - PullRequest
0 голосов
/ 29 октября 2018

Я просматриваю книгу «Программирование Phoenix», и после добавления маршрута / Users / New на стр. 60 мой маршрутизатор, похоже, перестал работать правильно.

Когда я пытаюсь перейти к любому маршруту / Users, я получаю

"не найден маршрут для GET / Users (Rumbl.Router)"

мой файл router.ex выглядит так:

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

  pipeline :browser do
    plug :accepts, ["html"]
    plug :fetch_session
    plug :fetch_flash
    plug :protect_from_forgery
    plug :put_secure_browser_headers
  end

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

  scope "/", Rumbl do
    pipe_through :browser # Use the default browser stack

    get "/", PageController, :index
    resources "/users", UserController, only: [:index, :show, :new, :create]

  end

end

Мой контроллер выглядит так:

defmodule Rumbl.UserController do
  use Rumbl.Web, :controller
  alias Rumbl.User

  def index(conn, _params) do
    users = Repo.all(User)
    render conn, "index.html", users: users
  end

  def show(conn, %{"id" => id}) do
    user = Repo.get(User, id)
    render conn, "show.html", user: user
  end

  def new(conn, _params) do
    changeset = User.changeset(%User{})
    render conn, "new.html", changeset: changeset
  end

end

выполнение «mix phoenix.routes» возвращает:

page_path  GET   /           Rumbl.PageController :index
user_path  GET   /users      Rumbl.UserController :index
user_path  GET   /users/new  Rumbl.UserController :new
user_path  GET   /users/:id  Rumbl.UserController :show
user_path  POST  /users      Rumbl.UserController :create

Работало нормально до добавления "нового" маршрута. Я попытался удалить новый маршрут (и все, что было с ним) и вернуться к тому, что было раньше, просто

get "/users", UserController, :index
get "/users/:id", UserController, :show

и все равно не работает.

Я перезапустил сервер phoenix и попытался заново создать файл router.ex с нуля. Я в растерянности, что здесь может происходить?

Вот трассировка стека:

[debug] ** (Phoenix.Router.NoRouteError) no route found for GET /Users (Rumbl.Router)
(rumbl) web/router.ex:1: Rumbl.Router.__match_route__/4
(rumbl) lib/phoenix/router.ex:307: Rumbl.Router.call/2
(rumbl) lib/rumbl/endpoint.ex:1: Rumbl.Endpoint.plug_builder_call/2
(rumbl) lib/plug/debugger.ex:122: Rumbl.Endpoint."call (overridable 3)"/2
(rumbl) lib/rumbl/endpoint.ex:1: Rumbl.Endpoint.call/2
(plug_cowboy) lib/plug/cowboy/handler.ex:18: Plug.Adapters.Cowboy.Handler.upgrade/4
(cowboy) /Users/richardschmidt/Code/Elixir/rumbl/deps/cowboy/src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4

1 Ответ

0 голосов
/ 29 октября 2018

/Users и /users не совпадают.

Попробуйте использовать версию путей в нижнем регистре: /users, /users/new.

...