Изменение порядка частей URL-адреса происходит из link_to в Rails - PullRequest
0 голосов
/ 02 июня 2010

Вот как я это делаю сейчас:

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 с, поэтому для меня более логично, чтобы URL выглядел следующим образом: /:controller/:id/:action.

Если вы согласны, как мне это сделать?

Если вы не согласны, пожалуйста, дайте мне знать, почему. (Я новичок в Ruby on Rails, поэтому я все еще привыкаю к ​​соглашениям MVC.)

Любой совет был бы великолепен!

1 Ответ

1 голос
/ 02 июня 2010

Да, вы можете! Это случай именованного маршрута! Все, что вам нужно сделать, это добавить в ваш route.rb эту ссылку:

map.asked 'profiles/:id/asked', :controller => 'profiles', :action => 'asked'

Этот маршрут можно вызвать с помощью ask_path (: id => @profile) Просто измените вашу ссылку в представлениях:

link_to "Profile", asked_path(:id => @profile)

Я не заслуживаю возражения за это, поскольку я просто вытащил его из самого файла rout.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)

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

...