Получить имя ресурса из URL при использовании пользовательского контроллера в Rails - PullRequest
2 голосов
/ 17 апреля 2009

У меня есть набор маршрутов, которые динамически генерируются во время выполнения, но все они указывают на один и тот же контроллер, т.е.

map.resources :authors, :controller => 'main'
map.resources :books, :controller => 'main'

Все они работают нормально, генерируя маршруты типа /authors/1, /books, /books/55 и т. Д., А затем все обрабатываются главным контроллером.

Однако я не могу найти, как получить имя ресурса в контроллере, то есть в действии index, когда URL-адрес /authors или /books. Я бы хотел определить, какой ресурс это, т.е. Автор или Книга

Я не могу использовать для этого отдельные контроллеры.

Это вообще возможно?

Ответы [ 3 ]

3 голосов
/ 17 апреля 2009

РЕДАКТИРОВАТЬ: полная смена ответа, потому что он был отменен.

Так что, поскольку он изменяет параметры, которые вы видите в своем действии, вы должны получить фактическое значение URI. Это действительно так же просто, как то, что предложил Терри.

 def index
   if request.request_uri =~ /books/
     #...
   else
     # if it is a author
   end
 end

Это сравнивает uri запроса (часть, которая будет после localhost:3000) с книгами, и вы можете увидеть, что запросил пользователь.

0 голосов
/ 19 мая 2009

См. Раздел «Маршруты по умолчанию и параметры по умолчанию» в документации ActionController :: Routing . Вы можете запрограммировать в свои маршруты произвольные дополнительные параметры, которые вы хотели бы отправить вашему контроллеру.

Просмотр URI запроса заставит вас синхронизировать маршруты и контроллеры, что сделает ваш код более хрупким и менее легко используемым. Избегайте, если возможно.

0 голосов
/ 17 апреля 2009

Я не думаю, что есть что-то похожее на метод .resource, но вы можете посмотреть на request.request_uri, который в вашем случае будет возвращать такие вещи, как / авторы или / книги, и действовать соответствующим образом.

...