Рубин на рельсовых маршрутах - PullRequest
2 голосов
/ 14 августа 2011

Мне трудно разобраться с маршрутами в рельсах 3. Я создал два эшафота: пользователей и журналы.Пользователи могут войти, но я не могу перейти на страницу журнала.Я знаю, что это связано с созданием маршрута.Если я перейду через URL к localhost: 3000 / magazines, я смогу увидеть несколько созданных мной журналов и каждого пользователя, связанного с каждым журналом.Я просто не могу соединить точки.Я хочу создать ссылку со страницы пользователя на страницу журнала.Я знаю, что это просто, но вся документация по маршрутам просто не имеет смысла для меня.Большое спасибо за ваше время.

Ответы [ 6 ]

19 голосов
/ 14 августа 2011

Ресурс, указанный в предыдущих ответах, потрясающий, и именно с этого я и начал.Я до сих пор говорю, что на случай, если я застряну где-нибудь.Одна вещь, которую я нахожу упущенной в обращении, состоит в том, что она не включает в себя объяснение чтения таблицы маршрутов, т.е. вывод команды rake routes, и требуется время, чтобы собрать части вместе.Хотя, если вы будете терпеливо читать все руководство, вы можете соединить их вместе.

В моей системе 'rake route' выдает следующий вывод (выдержка, относящаяся к resources :messages)

    messages GET    /messages(.:format)            {:action=>"index", :controller=>"messages"}
             POST   /messages(.:format)            {:action=>"create", :controller=>"messages"}
 new_message GET    /messages/new(.:format)        {:action=>"new", :controller=>"messages"}
edit_message GET    /messages/:id/edit(.:format)   {:action=>"edit", :controller=>"messages"}
     message GET    /messages/:id(.:format)        {:action=>"show", :controller=>"messages"}
             PUT    /messages/:id(.:format)        {:action=>"update", :controller=>"messages"}
             DELETE /messages/:id(.:format)        {:action=>"destroy", :controller=>"messages"}

Все столбцы в этой таблице дают очень важную информацию:

  • Имя маршрута (1-й столбец): здесь указывается название маршрута, к которому можно добавить "_url" или "_path", чтобы получить имя помощника для маршрута.Например, первое - это «сообщения», поэтому вы можете использовать messages_path и messages_url в своих представлениях и контроллерах в качестве вспомогательного метода.Глядя на таблицу, вы можете сказать, что messages_path сгенерирует путь в форме "/messages(.:format)".Аналогично, генерируются другие имена маршрутов: «new_message», «edit_message» и «message».Вы также можете управлять наименованием маршрутов .
  • HTTP-глагол (2-й столбец): это дает информацию о глаголе http, на который будет отвечать этот маршрут.Если его нет, то это означает, что этот маршрут будет отвечать на все глаголы http.Обычно браузеры поддерживают только глаголы "GET" и "POST".Рельсы имитируют «PUT» и «DELETE», передавая параметр «_method» с именем глагола в качестве значения для имитации «PUT» и «DELETE».Ссылки по умолчанию приводят к глаголу «GET» и отправке формы в «POST».В сочетании с первым столбцом, если вы используете messages_path с http «GET», это будет соответствовать первому маршруту, а если вы используете его с «POST», это будет соответствовать второму маршруту.Это очень важно отметить, один и тот же URL с разными http-глаголами может отображаться на разные маршруты.
  • Шаблон URL (3-й столбец): он похож на ограниченное функциональное регулярное выражение с собственным синтаксисом.,«: id» ведет себя как (.+) и фиксирует совпадение в параметре «id», так что вы можете сделать что-то вроде params[:id] и получить захваченную строку.Скобки () означают, что этот параметр является необязательным.Вы также можете передать эти параметры в помощники для создания соответствующего маршрута.Например, если вы использовали message_path(:id => 123), то сгенерирует вывод "/messages/123".
  • Где этот маршрут (4-й столбец): Этот столбец обычно сообщает контроллеру и соответствующему действиюкоторый будет обрабатывать запросы, соответствующие этому маршруту.Здесь может быть дополнительная информация, например, об ограничениях, если вы их определили.

Так что, если "localhost: 3000 / magazines" - это страница, которую вы хотите, вы должны проверить таблицу маршрутов с шаблоном url как "/ magazines(.: format) "и разберись сам, чтобы узнать, что тебе нужно.Я бы порекомендовал вам прочитать полное руководство сверху вниз, если вы только начинаете рельсы.

(Это может быть просто излишним, чтобы написать все это здесь, но я столкнулся со многими проблемами из-зачтобы эта информация не была доступна в консолидированном виде. Всегда хотел написать ее и, наконец, сделал. Я хотел бы, чтобы она была доступна на http://edgeguides.rubyonrails.org/routing.html в отдельном разделе.)

2 голосов
/ 14 августа 2011

Это действительно хорошая сводка маршрутов: Маршрутная маршрутизация из-за пределов .

1 голос
/ 14 августа 2011

А как же:

<%= link_to "magazines", magazines_path %>

Вы должны знать обо всех маршрутах, созданных простой эшафот. Это довольно просто и объясняется в руководствах по Rails.

Вот подробности: http://guides.rubyonrails.org/routing.html#paths-and-urls

0 голосов
/ 29 июня 2012

На сегодняшний день лучшее объяснение маршрутов, которые я нашел, - это The Rails 3 Way Оби Фернандеса (основателя Hash Rocket).

0 голосов
/ 14 августа 2011

Несколько вещей, в дополнение к тому, что уже сказали другие:

magazines_path - наиболее вероятное имя ссылки на страницу индекса.

<%= link_to "Magazines", magazines_path %>

так что надо делать свое дело. Но если вы хотите увидеть маршруты, я бы порекомендовал вам просто запустить rake routes, в котором будет перечислено, что Rails считает допустимым именем маршрута. Если вы хотите увидеть, как они используются, проверьте страницы просмотра для вашего леса. app/views/magazines/show.html.erb, например, может иметь что-то вроде этого внизу:

<%= link_to 'Edit', edit_magazine_path(@magazine) %> |
<%= link_to 'Back', magazines_path %>

Ссылка для редактирования ведет на страницу edit (/magazines/[ID]/edit) для журнала, хранящегося в @magazine, а обратная ссылка - на страницу индекса (/magazines/). Страница показа для отдельного журнала будет magazine_path(@magazine), а новый путь будет new_magazine_path(@magazine).

Вы обязательно должны проверить ресурсы, которые опубликовали другие - маршрутизация Rails гибкая, но очень "волшебная" - но в любом случае это должно помочь вам дать некоторый контекст.

Кроме того, это должно генерироваться автоматически, но я думаю, что большинство людей предполагает, что ваш config/routes.rb содержит что-то вроде следующего:

My::Application.routes.draw do
  resources :magazines
  resources :users
  # or the above combined as resources :magazines, :users
end

Это то, что предписывает rails строить основные маршруты для индексации, создания, редактирования, показа, создания, обновления, уничтожения для определенного ресурса.

...