Вы должны проверить документацию для ActionController :: Routing , ActionController :: Resources для маршрутов RESTful и удобного Rails Guide по этой теме. Есть также ряд Railscasts относительно маршрутов .
Будет работать что-то простое, например map.connect :path/:link, :controller => :companies
, но это может вызвать некоторые проблемы в зависимости от существующих маршрутов и не является RESTful. Если это не вызывает каких-либо конфликтов, это позволит вам сделать то, что вы просите.
Вы можете добавить ограничения к маршруту, используя опцию: Требования, чтобы сузить то, что считается совпадением:
map.company_link :company/:link, :requirements => { :company => /[\w\-]+/, :link => /[\w\-]+/ }
Это будет соответствовать только символам слова и тире ('-') в URL, и я считаю, что маршруты по умолчанию будут работать правильно. Я также сделал его именованным маршрутом с помощью map.company_link
, поэтому Rails создает набор помощников URL, позволяющих легко ссылаться на ваш маршрут: company_link_path(:company => "Bechtel", :link => "railwayproject")
Если вы хотите придерживаться способа REST, это будет:
map.resource :companies do |company|
company.resources :links
end
/companies/1/links/2
будет передано в действие show links_controller с компанией и идентификаторами ссылок в качестве параметров. Это объясняется далее в разделе вложенных ресурсов ранее упомянутого Руководства по Rails. Обычно вы используете опцию: shallow => true, потому что идентификатор ссылки 2 уже уникален и не должен быть вложенным в компании. Реальное значение вложенного маршрута показывает все ссылки с /companies/1/links
и все другие действия, идущие непосредственно к отдельной ссылке /links/2
.