2015-06-22 7 views
0

У меня возникло сомнение, когда я писал код рельсов. В моем link_to я использовал свой маршрут order, чтобы показать мой заказ. Итак:по умолчанию маршрут в рельсах

<% @orders.each do |order| %> 
    <tr> 
     <th><%= order.name %></th> 
     <th><%= link_to 'Mostra', order %></th> 
    </tr> 
<% end %> 

Я видел мои грабли маршруты и там был:

order GET /orders/:id(.:format) orders#show 

Если я правильно помню, я генерироваться ресурс для заказа с подмостей. Однако, когда я создал вручную новые ресурсы (не используя строительные леса) У меня был другой маршрут для моего ресурса. Например, у меня есть что-то вроде name_resource_show(:id) для шоу. Этот тип стиля - хорошая причина, я понимаю, что мне нужно передать идентификатор, если я хочу увидеть конкретный ресурс. Но в случае раньше, в случае order, я действительно не знаю, как рельсы могут понять, использовать ли идентификатор заказа объекта. А также: Почему у меня разные названия маршрутов? почему у меня иногда есть _path, а иногда (может быть, когда я создаю ресурс с помощью строительных лесов)? Я бы ожидал чего-то вроде order_show(:id), а не просто order. как это работает?

ответ

3

Помощники Rails достаточно умны, чтобы использовать объект модели для формирования URL-адреса.

<%= link_to 'Mostra', order %> эквивалент <%= link_to 'Mostra', order_path(order) %> и оба пункта на странице для показа.

Это будет генерировать 7 маршрутов для заказов вашего контроллера.

resources :orders 

порядка GET/заказы /: заказы ID # показать

Здесь порядка является вспомогательным методом обеспечивает для вызова маршрутов вместо использования/заказов /: идентификатора.

Просто вы можете использовать order_path (порядок), чтобы маршрутизировать /orders/:id

получить Similary мы получаем помощнику для всех 7 маршрутов. Вы также можете переопределить помощники.

Для получения дополнительной информации перейдите по ссылке ниже.

Ссылка:http://guides.rubyonrails.org/routing.html

1

Во-первых, я рекомендую следовать правилам Rails на маршрутах (см. main reference article here).

Вот ответы на ваши вопросы по порядку.

  • Путь, который вы получили от rake routes, имеет смысл следующим образом. Посмотрите URL-адрес (orders/:id). Во всех ваших заказах, переданный :id, указывает, на какой из них стоит посмотреть. Характер запроса GET указывает, что вы получаете данные этой записи, т. Е. Что это действие SHOW.
  • Rails понимает, где идентификатор из-за структуры маршрутов. Если бы у вас было order GET /orders/:year/:id в маршрутах, то Rails будет знать, как искать третий параметр для идентификатора, который ему нужен.
  • Два варианта доступа к маршрутам: _path и _url (see here for details), но есть некоторые альтернативы, объясненные в основной справочной статье, которую я связал сверху.
  • Вы все еще можете использовать явный маршрут, но параметр order - это просто немного сахара. Rails предлагает сделать вещи более легкими для чтения.
Смежные вопросы