Понимание маршрутов рельсов: соответствие 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: Я не получаю ответы, которые хочу, и поэтому я предполагаю, что мой вопрос неверен. Я сломаю его на две части:

  • В чем разница между:

    match '/pages/home' = > 'pages # home' А ТАКЖЕ root: to = > 'pages # home'

некоторые говорят, что корень берет его на свою корневую страницу, которую я могу понять, но, как я объяснил выше, если у меня есть только root: страницы /home показывают ошибку маршрутизации. страницы /home должны совпадать с корневой страницей, правильно?

  1. В чем разница между:

    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/", он направляется к домашнему действию в контроллере страниц.