Понимание маршрутов рельсов: соответствие vs root в routes.rb
Я следую руководству по рельсам по этой ссылке:
http://ruby.railstutorial.org/chapters/filling-in-the-layout#code:static_page_routes
в файле /config/routes.rb, у меня есть
SampleApp::Application.routes.draw do
match '/contact', :to => 'pages#contact'
match '/about', :to => 'pages#about'
match '/help', :to => 'pages#help'
root :to => 'pages#home'
end
когда я запускаю сайт, он дает мне ошибку: никакой маршрут не существует. я ищу по форуму, и ppl предлагает поставить совпадение '/pages/home' = > 'pages # home'
который я сделал:
SampleApp::Application.routes.draw do
match '/contact', :to => 'pages#contact'
match '/about', :to => 'pages#about'
match '/help', :to => 'pages#help'
match '/pages/home' => 'pages#home'
root :to => 'pages#home'
end
все работает. но теперь, на мой вопрос, в чем разница между
1. match '/something', :to => 'pages#something'
2. match '/something' => 'pages#something'
3. root :to => 'pages#home'
в основном, код, который я только что положил. не должен ли корень брать основную главную страницу, и мне не нужны страницы соответствия /home = > pages # home?
настолько запутанным,
Спасибо!
EDIT1: Я не получаю ответы, которые хочу, и поэтому я предполагаю, что мой вопрос неверен. Я сломаю его на две части:
некоторые говорят, что корень берет его на свою корневую страницу, которую я могу понять, но, как я объяснил выше, если у меня есть только root: страницы /home показывают ошибку маршрутизации. страницы /home должны совпадать с корневой страницей, правильно?
-
В чем разница между:
match '/contact',: to = > 'pages # contact'
А ТАКЖЕ
match '/pages/home' = > 'pages # home
синтаксически, первая строка имеет: to = > , а вторая строка - нет. это: нужно? что он делает?
спасибо
Ответы
Ответ 1
Насколько я знаю
match '/something', :to => 'pages#something'
match '/something' => 'pages#something'
эквивалентны. Нередко можно найти более одного способа сказать то же самое в Rails. Сокращенные обозначения изобилуют общепринятыми методами. Если вам все равно, последнее - это то, что я использую и вижу чаще.
Что касается корневого маршрута, вот что происходит: root :to => 'pages#home'
отображает "/" на домашний метод в страницах_controller.rb, как вы уже знаете. Но использование "pages # home" не создает URL-адрес "pages/home". Все, что он делает, это сказать рельсы, что выполнять, когда он сталкивается с "/". Вот почему вам нужно также сказать рельсы, что делать, когда он сталкивается с "страницами/домами". Определения маршрутов - это односторонняя сделка.
Я могу сказать гораздо больше, но я постараюсь, чтобы мой ответ был кратким. Дайте мне знать, если вам нужно больше разъяснений. Кроме того, этот путеводитель по рельсам - отличный ресурс.
Ответ 2
root :to => 'pages#home'
URL /
будет отображаться в действие pagescontroller
home
.
/something
будет отображением url для действия pagescontroller
something
Ответ 3
root :to => "pages#home"
- маршрут по умолчанию, т.е. когда вы переходите на "yourdomain.com/", он направляется к домашнему действию в контроллере страниц.