Основные рельсы 3 маршрута и неизвестные маршруты (включая подстановочные знаки)

Я читал о маршрутизации в Rails 3 и не смог добиться того, что мне нужно. Все еще новичок в маршрутах в Rails 3, поэтому я, возможно, просто упускаю из виду или слишком усложняю.

Это то, чего я хочу достичь:

website/foo маршруты к foo контроллеру, index действие

website/foo/index маршруты к foo контроллеру, index действие

website/foo/bar маршруты к foo контроллеру, bar действие

website/foo/random маршруты к foo контроллеру, index действие

website/foo/bar/rondom маршруты к foo контроллеру, bar действие

где «случайным» может быть любой текст, числа, пути (/new/x/w/y/23) или что-то еще.

Я пытался использовать как match, так и resources с collection, и хотя он обрабатывал базовый случай, он не обрабатывал «случайный».

Я также ищу соответствующий именованный путь, он должен быть указан или он будет сгенерирован?


person achinda99    schedule 13.09.2011    source источник
comment
rake routes покажет вам существующие именованные маршруты.   -  person Caley Woods    schedule 13.09.2011


Ответы (2)


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

foo/bar/*additional => "foo#bar" 

Примеры:

website/foo/bar/random # params[:additional] = "random"
website/foo/bar/random/2 # params[:additional] = "random/2"
website/foo/bar/random/and/more/1/random/stuff/ # params[:additional] = "random/and/more/1/random/stuff/"
person Gazler    schedule 13.09.2011
comment
Я ничего не могу сделать с этим комментарием. Пожалуйста, предоставьте ваш файл route.rb, и я посмотрю. - person Gazler; 13.09.2011
comment
Я пытался это сделать, но получил ошибку. match 'foo/*other' => 'foo#index', :as => 'foo#index' match 'foo/bar/*other' => "foo#bar', :as => 'foo#bar' выдает ошибку: ActionController::RoutingError Exception: /usr/local/lib/ruby/gems/1.8/gems/actionpack-3.0.9/lib/action_dispatch/routing/route_set.rb:425:in 'raise_routing_error': No route matches {:controller=>"foo"} хотя контроллер foo существует - person achinda99; 13.09.2011
comment
@ baash05 - Хотя он ссылается на внешнюю информацию, он также дает довольно наглядный пример использования. Я также не могу не заметить, что вы были менее бдительны с другими ответами здесь, которые также ссылаются на внешнюю информацию. - person Gazler; 20.02.2014

http://guides.rubyonrails.org/routing.html содержит кучу действительно полезной информации, особенно раздел о подстановке маршрута.

Чтобы точно соответствовать тому, что вы определили выше, вы можете:

# config/routes.rb
namespace :website do
  match 'foo'             => 'foo#index'
  match 'foo/index'       => 'foo#index'
  match 'foo/bar'         => 'foo#bar'
  match 'foo/*random'     => 'foo#index' # params[:random] will contain "hello/world" if the URL is /website/foo/hello/world
  match 'foo/bar/*random' => 'foo#bar'
end

Вы можете использовать опцию :as, чтобы указать именованный маршрут, например.

match 'foo' => 'foo#index', as: 'foo' # helper would be website_foo_path
person tristanm    schedule 14.09.2011