Rails: доступ к ресурсам с двух маршрутов или лучший подход? - PullRequest
2 голосов
/ 01 марта 2011

Я работаю над приложением, где пользователи могут делиться фотографиями. Фотографии могут при желании принадлежать коллекции, но не обязательно.

В настоящее время пользователи могут просматривать все фотографии через: photos/id. Я думаю, что было бы также иметь смысл, если бы они могли просматривать фотографии для конкретной коллекции через collections/id/photos

Таким образом, это будет означать, что фотографии были и ресурсом верхнего уровня, и вложенным ресурсом. Я полагаю, я мог бы настроить это на маршрутах так:

resources :photos
resources :collections do
  resources :photos
end

Является ли это хорошей идеей или есть лучший способ повторно использовать фотомодель, при этом позволяя ему при необходимости действовать как вложенный в коллекции? Я был бы очень признателен за предложения относительно "рельсового способа" обработки такого сценария.

Спасибо!

1 Ответ

1 голос
/ 01 марта 2011

Предлагаемые вами маршруты работают отлично.Тем не менее, вам нужно следить за действиями контроллера Photos.Поскольку их можно вызывать для отдельной фотографии или коллекции, вам необходимо условно найти фотографии, основываясь на доступных параметрах.

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

resources :photos
resources :collections do
  resources :photos, :only => [:index, :create, :destroy]
end

# index => show photos in a collection
# create => add a photo to a collection
# destroy => remove a photo from a collection

На самом деле вам не нужно иметь возможность редактировать / обновлять / показывать фотографию в качестве члена коллекции на основе предоставленной вами информации.

Другой вариант - использоватьмаршрут в пространстве имен:

namespace :collection, :path => '/collection', :as => :collection do
  resources :photos, :only => [:index, :create, :destroy]
end

Это позволит вам отделить вашу коллекцию :: Фотографии от ваших фотографий…

controllers/photos_controller.rb
controllers/collections/photos_controller.rb

И если вы действительно хотите, Rails позволяет вам делать то же самоеПросмотры.Еще одно преимущество использования пространства имен заключается в том, что оно настраивает действительно изящных помощников маршрута:

photo_path(@photo) #=> /photos/1
collection_photos_path #=> /collections/1/photos
etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...