2015-01-03 3 views
1

У меня был link_to, который создавал бы пути, такие как domain.com/shopname. Выглядело это так:Как работает эта маршрутизация Rails?

routes.rb

get 'shop/:username' => 'users#profile'

index.html.erb

<%= link_to user.shop_name, user.username %>

Однако я хотел путь, чтобы быть domain.com/shops/shopname и Я закончил с этим:

routes.rb

get 'shop/:username' => 'users#profile', :as => :shop

index.html.erb

<%= link_to user.shop_name, shop_path(user.username) %>

Это работает, но я не понимаю, почему!

+0

Это работает, потому что вы используете его точно так же, как и предусмотрено. Я не уверен, как это объяснить, просто вы хотите сбросить исходный код? Вы используете 'routes.rb' для создания вспомогательного метода, который выводит относительный URL-адрес. Какая часть сбивает с толку? Весь процесс маршрутизации, создание 'shop_path', что? Этот вопрос является безответным и вне темы в его нынешнем виде. – meagar

ответ

2

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

При использовании as:, вы определяете имени путь, который получает соответствующий вспомогательный метод.

Весь смысл помощника - заполнить «пробелы» в маршруте. Ваш маршрут, /shop/:username, имеет один пробел, :username. Итак, первый аргумент, который вы передаете shop_path, заполняется для переменной :username.

Предположим, ваш user.username является "john".

Он не работал до того, потому что вы просто демпинг строку в link_to, который выплевывает путь /john. Это явно не соответствует /shop/:username. Когда вы даете "john" - shop_path, он выплевывает /shop/john, что будет соответствует маршруту /shop/:username.

Смежные вопросы