Соответствие и маршруты в Rails

Я сгенерировал контроллер и изменил маршруты, но открытие ссылок дает ошибки на моем локальном сервере.

Генерация контроллера и маршрутов

rails generate controller StaticPages home about team contact

Изменить маршруты .rb

MyApp::Application.routes.draw do
  root to: 'static_pages#home'

  match '/about',    to: 'static_pages#about'
  match '/team',     to: 'static_pages#team'
  match '/contact',  to: 'static_pages#contact'
end

Работа корневого пути, но ни одна из команд "about", "team" или "contact" не работает. Это ошибка, которую я получаю:

"Вы не должны использовать метод match в своем маршрутизаторе, не указав метод HTTP. Если вы хотите разоблачить ваши действия как для GET, так и для POST, добавьте параметр via: [:get, :post]. Если вы хотите выставить свое действие GET, используйте get в маршрутизаторе: Вместо: match" controller # action "Do: get" controller # action ""

Почему я не могу использовать 'match'?

Ответ 2

Вы можете использовать match, вы должны добавить опцию via::

match '/about',    to: 'static_pages#about', via: :get
match '/team',     to: 'static_pages#team', via: :get
match '/contact',  to: 'static_pages#contact', via: :get

Вы также можете передать другие HTTP-глаголы via:, если вам нужно, например via: [:get, :post]

Источник: Руководство по маршрутизации Rails

Ответ 3

Сначала вы должны указать HTTP-метод, добавив via: :get в конец match 'st' => 'controller#action

И лучше использовать get '/home', to: 'static_pages#home'

Но есть проблема, что ваш код не следует за RESTful, который поддерживает только 7 действий: индекс, новый, редактировать, создавать, обновлять, показывать и уничтожать.

Это два решения:

SOL 1. Поместите их в другой контроллер (дома, о..), и все эти контроллеры имеют действие index.

SOL 2. Если это слишком много, мы можем сопоставить их с действием show. Мы используем static_pages-контроллер, и каждая страница (home, about) будет элементом.

Маршруты будут выглядеть как /static_pages/home /static_pages/about

Я знаю, что это не хорошо из-за префикса static_pages.

Мы можем легко избавиться от этого, добавив пользовательские маршруты в конец файла маршрутов:

get '/:id', to: 'static_pages#show'

Что это. И если вы думаете, что это слишком много работы (я тоже так думаю), проверьте этот драгоценный камень Высокое напряжение. Получайте удовольствие.