Почему мои маршруты не совпадают?
-
22-12-2019 - |
Вопрос
Я новичок в Rails.Я пытаюсь включить использование именованных маршрутов в примере приложения rails.Когда я делаю следующее и пытаюсь получить доступ к странице в моем браузере, я получаю Контроллер действия:Пойманное исключение как заголовок, так и no route matches
Сообщение.
конфигурация/routes.rb
SampleApp::Application.routes.draw do
# root to: 'static_pages#home' #matches '/'
root to: 'static_pages#home'
match '/help', to: 'static_pages#help', via: [:get, :post] (*)
match '/about', to: 'static_pages#about', via: [:get, :post] (*)
match '/contact', to: 'static_pages#contact', via: [:get, :post] (*)
[...comments...]
end
У меня есть необходимые действия в моем контроллере.У меня также есть представления, но ни одно из них не является сообщением об ошибке.Точное сообщение об ошибке выглядит следующим образом:
No route matches [GET] "/static_pages/home"
Я тоже пытался root 'static_pages#home'
в качестве альтернативы.По-прежнему ничего.
(*) Когда я удаляю via: [:get, :post]
, браузер выдает ошибку RuntimeError со словами,
Вам не следует использовать
match
способ маршрутизатора без указания метода HTTP.Если вы хотите показать свое действие обоим GET и POST, добавьтеvia: [:get, :post]
вариант.Если вы хотите раскрыть ваше действие, чтобы ПОЛУЧИТЬ, используйтеget
в маршрутизаторе:Вместо того , чтобы:соответствовать "controller#action" Выполнить:получить "контроллер#действие"
Решение
Root - это маршрут при посещении localhost: 3000, поэтому при посещении 'localhost: 3000' он сопоставляется со static_pages/home в вашем случае.
Если вам нужно, чтобы 'localhost: 3000/static_pages/home' также был перенаправлен на соответствующий контроллер, вам необходимо дополнительно определить маршрут следующим образом.
get 'static_pages/home'
В противном случае я не думаю, что необходимо перезапускать ваш сервер после изменения вашего маршрута, если, конечно, что-то не так, но в основном это не решает проблему.
Другие советы
ПОМНИТЕ, что после изменения маршрутизации вы ДОЛЖНЫ перезапустить свой сервер!!!
мне кажется, что вы пытаетесь открыть в своем браузере URL-адрес
127.0.0.1:3000/static_pages/home
когда ваш корневой маршрут определяет127.0.0.1:3000
PS Я надеюсь, что это поможет вам
Я думаю, что этот пост развеет все ваши сомнения, У меня была похожая проблема ранее.
На самом деле, когда вы выбираете URL в своем браузере, по ошибке вы пытаетесь получить доступ
local:3000/static_pages/home
когда вы должны попытаться получить доступ `
local:3000/home
и по мере того, как вы будете следовать руководству, в нужное время вы поймете, почему "Совпадение" не принимается но на данный момент вам следует продолжить работу с вашим get"route" формат.Одна важная вещь заключается в том, что вы должны провести некоторое исследование, прежде чем задавать какой-либо вопрос, и поскольку этот вопрос был задан несколькими другими людьми здесь, включая меня, нет смысла публиковать дублирующуюся тему.Я надеюсь, вам все ясно.наслаждайтесь!!!
вот аналогичный вопрос.https://stackoverflow.com/a/19047811/2545197