Basic Rails 3 Вопрос маршрутизации - PullRequest
0 голосов
/ 01 августа 2011

Я пытаюсь создать несколько чистых URL-адресов в приложении Rails3, над которым я работаю ... но мне трудно понять, как (или даже нужно) настроить маршруты для этой работы.

Вот пример:

У меня есть список магазинов. Каждый магазин находится в категории (здоровье, спорт и т. Д.) У каждого магазина есть местоположение.

У меня есть 2 способа представить данные. Один дисплей - это список всех магазинов в структуре типов каталогов, другой - на карте.

В идеале я бы хотел, чтобы мои URL работали примерно так:

/ stores / health / map (или / stores / map / health), чтобы показать только хранилища здоровья на карте (где, по сути, параметр карты влияет на то, какой вид отображается, но все еще с использованием контроллера индекса ... который использование коллекции в моем маршруте не подходит)

Другой URL-адрес, который мне нужен, это / stores / sports /, чтобы показать только спортивные магазины в виде каталога (по умолчанию), например ...

Мне не совсем понятно, как я могу манипулировать маршрутами, чтобы справиться с этим ...

Вот мой текущий маршрут, который на самом деле не делает это для меня:

resources :stores do
  collection do
    get 'map'
  end
end

Кроме того, я хотел бы иметь возможность добавлять фильтры без использования? Query = params ... so:

/ stores / sports / hockey, по сути, отфильтровывает только хоккейные магазины ...

У меня нет проблем с этим с помощью? Query, я просто помещаю мои параметры в более приятный URL, которого я пытаюсь достичь.

Документация не описывает то, что я пытаюсь сделать, поэтому я предполагаю, что я пытаюсь сделать это неправильно.

Это разрушающий REST? Я смотрю на все это задом наперед?

Спасибо за помощь, JD

1 Ответ

1 голос
/ 01 августа 2011

Вы, возможно, думаете об этом.: -)

Если вы хотите направить HTTP Get 'stores / health / map' в StoresController с именем действия, скажем, health_map, вам нужно сделать следующее:

get 'stores/health/map' => 'stores#health_map'

Все, что является чистым URL, не изменяет данные и использует HTTP GET, является RESTful.(И это от соавтора книги о REST).Когда вы хотите изменить данные, вам нужно быть более осторожным в использовании методов.

Чтобы выполнить фильтрацию, попробуйте что-то вроде:

get '/stores/sports/:filter' => 'stores#sports'

Значение фильтра будетвойдите в ваш метод как params[:filter]

...