Перестановка частей URL-адреса, полученного из link_to в Rails
-
23-10-2019 - |
Вопрос
Вот как я это делаю сейчас:
link_to "Profile", :controller => "profiles", :action => "asked", :id => @profile
# => <a href="/profiles/asked/1">Profile</a>
Имеет ли смысл, чтобы URL-адрес был <a href="/profiles/1/asked">Profile</a>
? Profile 1
спросил некоторое количество question
s, поэтому для меня более логично, чтобы URL-адрес выглядел так: /:controller/:id/:action
.
Если вы согласны, как мне это сделать?
Если вы не согласны, пожалуйста, дайте мне знать, почему.(Я новичок в Ruby on Rails, поэтому все еще привыкаю к соглашениям MVC.)
Будем признательны любому совету!
Решение
Да, ты можешь!Это случай именованного маршрута!Все, что вам нужно сделать, это добавить в ваш маршрут.рб эту ссылку:
map.asked 'profiles/:id/asked', :controller => 'profiles', :action => 'asked'
Этот маршрут можно вызвать с помощью ask_path(:id => @profile) Просто измените свою link_to в представлениях на:
link_to "Profile", asked_path(:id => @profile)
Я не заслуживаю одобрения за это, так как я только что извлек его из самого файла Routes.rb.Если вы внимательно посмотрите на автоматически сгенерированный файл Routes.rb, вы увидите следующее:
# Sample of named route:
# map.purchase 'products/:id/purchase', :controller => 'catalog', :action => 'purchase'
# This route can be invoked with purchase_url(:id => product.id)
Если вы хотите сделать его более общим, я не пробовал..но я думаю, что это должно работать, тем не менее:
map.routeany ":controller/:id/:action"
и в представлении:
link_to "Route to something...", routeany_path(:controller => "somecontroller", :action => "someaction", :id => @somecontroller)
В любом случае, ура!:)