Rails 3 маршрутизация, как сопоставить несколько? - PullRequest
1 голос
/ 26 апреля 2011

Как мне сопоставить несколько контроллеров, например, идентификатор?

Я пробовал это в моих маршрутах:

match '/:id' => 'kategoris#show'
match '/:id' => 'tags#show'

Ответы [ 3 ]

4 голосов
/ 26 апреля 2011

Маршрутизация контроллера Rails вам не подходит, если вы хотите соответствовать http://example.com/<something>.

Вы можете создать один ThingsController:

match '/:id' => 'things#show'

и затем сделайте что-нибудь подходящее в вашем ThingsController.

Например. в Sinatra (которую вы можете смонтировать как промежуточное программное обеспечение Rack) вы должны сделать это:

get "/:id" do :id
  if(@tag = Tag.find(:id))
     haml :tag
  elsif(@category = Category.find(:id))
     haml :category
  else
     pass #crucially passes on saying 'not found anything'.
  end
end

В любом случае, вы получите крик боли от RESTful Rails.

1 голос
/ 26 апреля 2011

Если вы можете реализовать идентифицируемую разницу в идентификаторах ваших тегов и идентификаторов категорий, то вы можете использовать ограничения для их поиска. Например, если категории всегда начинаются с цифры, а теги - нет, вы можете сделать это.

match '/:id' => 'categories#show', :constraints => { :id => /^\d+/ }
match '/:id' => 'tags#show'

Первая строка будет соответствовать, только если :id начинается с цифры. Если это не совпадает, вторая строка ловит остатки. Так; /67-something направляется на контроллер категорий, а /something направляется на контроллер тегов.

0 голосов
/ 26 апреля 2011
match 'kategoris/:id' => 'kategoris#show'
match 'tags/:id' => 'tags#show'

или

match '/:id/kategoris' => 'kategoris#show'
match '/:id/tags' => 'tags#show'
...