Я хотел бы рассмотреть переделку, которая RESTful маршруты для Comment
вы гнездились, а какие нет. Я предполагаю, что ваши модели выглядеть примерно так:
# app/models/image.rb
class Image < ActiveRecord::Base
has_many :comments
end
# app/models/comment.rb
class Comment < ActiveRecord::Base
belongs_to :image
end
Поскольку ваши Image
и Comment
модели обладают отношения один-ко-многим, я могу понять, почему вы думаете гнездиться маршрут комментарии ресурсов в пределах изображений один. Однако все действия CRUD в comments_controller.rb
, только create
фактически требует, чтобы родительский образ ID явно передается в. С точки зрения RESTful, только new
и create
действия требуют, что image_id
передается к действию. Операции edit
, update
, delete
и like
могут выполняться независимо от исходного изображения.
Рассмотрим альтернативную схему маршрутизации вместо:
# config/routes.rb
resources :images do
resources :comments, :only => [:index, :new, :create]
end
resources :comments, :only => [:show, :edit, :update, :destroy] do
member do
post 'like'
end
end
Теперь только комментарий действия , которые явно зависели от родительского ID фактически вложены в пределах изображения маршрутов. Остальные действия комментариев непосредственно направляются в контроллер комментариев, не передавая родительский идентификатор. Ваши маршруты больше не дублируются, и каждое действие будет иметь только один маршрут, объявленный для него.
Благодарим за подробный ответ/объяснение! – 0xSina
Несомненно. Надеюсь, все это имеет смысл. В принципе, обеспечение того, чтобы каждое действие имело только один маршрут, удерживает ваше приложение DRY и не позволяет вам добавить кучу условных выражений для обработки параметров в действиях, которые перенаправляются из нескольких источников. – zeantsoi
Это вроде поздно, но .... распространено ли иметь путь к индексу/новому/созданию ресурсов комментариев, не включая идентификатор изображения, а скорее включать его в параметры? поэтому вместо того, чтобы говорить изображения/1/комментарии, делать комментарии/1? image_id = 5. Какой из них более спокойный? Благодаря! – 0xSina