Перестановка частей URL-адреса, полученного из link_to в Rails

StackOverflow https://stackoverflow.com/questions/2954455

  •  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 спросил некоторое количество questions, поэтому для меня более логично, чтобы 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)

В любом случае, ура!:)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top