Пользовательская маршрутизация - PullRequest
1 голос
/ 24 июня 2010

У меня есть три соответствующие модели: компании, проекты и ссылки, и я пытаюсь создать систему, в которой мы генерируем маршруты в соответствии с создаваемыми ссылками, например:

www.site.com/the_company's_specific_path/one_of_company's_links

Одна компания has_many: проекты, один проект has_many: ссылки.

Краткое описание структуры:

#Company table
company.id
company.path # such as 'Bechtel'

#Project table
project.id
project.company_id

#Link table
link.id
link.link # such as 'railwayproject'
link.project_id
link.company_id # some links may be tied to the company and not one specific project

#Final route generated: www.site.com/bechtel/railwayproject

Как настроить эту систему так:

  • Часть 1 измаршрут указывает company.path (по линиям @company = Company.find_by_path(params[:path]))
  • Часть 2 находит ссылку (по линиям @link = Link.find_by_link_and_company_id(params[:link],@company.id))
  • После ввода этого URI / URL пользователь вводит 'показать, где они видят информацию о проекте или компании.(Когда ссылка не привязана конкретно к проекту, мы вместо этого показываем «список», отображающий все проекты компании.)

Я прошу прощения, если по какой-либо причине вышеприведенное неясно.Я пытался объяснить, как могу!Спасибо.

1 Ответ

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

Вы должны проверить документацию для 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...