Rails: переопределить RESTful пути? - PullRequest
2 голосов
/ 28 октября 2010

Возможно ли переопределить путь RESTful?

Например, у меня есть photo_path(photo), который сгенерирует /photos/12345

Но я бы хотел для всех случаев использования photo_pathна самом деле генерировать URL как /photos/joeschmoe/12345 (который является пользователем фотографии и идентификатором фотографии).

Очевидно, я мог просто создать новый маршрут, но хотел убедиться, что не было более RESTful способа сделатьэто.

1 Ответ

2 голосов
/ 28 октября 2010

Вы можете сделать фотографии подресурсом для пользователя, чтобы у вас было users/joeschmoe/photos/12345 (конечно, здесь вашему контроллеру пользователей потребуется возможность принимать имя пользователя вместо идентификатора, что является еще одной проблемой маршрутизации, которую нужно решитьно не сложно)

resources :users do
  resources :photos
end

Тогда ваш контроллер может позвонить

@photos = Photo.find_by_username(params[:id])

Хотя я думаю, что есть менее хакерские способы сделать это.

Вы также можете добавитьjoeschmoe в качестве параметра строки запроса.

Или вы можете сделать имя пользователя необязательным параметром в маршруте, так что это будет что-то вроде

match "/photos(/:username)/:id" => "photos#show"

Или если вы хотите новый именованный маршрут:

match "/photos/:username/:id" => "photos#show_by_user", :as => :user_photo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...