У меня есть следующие модели:
- Сообщение
- Тег
- TaggedPost (из которого Post и Tag получают свои ассоциации by_many: through)
И у меня есть следующий routes.rb
файл:
resources :tags
resources :posts do
resources :tags
end
Поэтому, когда я перехожу к, скажем, /posts/4/tags
, это запустит меня в действие индекса для контроллера тега со значением post_id
, установленным в массиве параметров. Круто.
Мой вопрос заключается в том, что теперь, когда я получаю доступ к ресурсу вложенных тегов в сообщениях, должен ли я еще раз удалять контроллер тегов? Или мне нужно настроить какой-либо другой контроллер для обработки вложенных тегов в этот момент? В противном случае мне нужно построить дополнительную логику в контроллере тегов. Конечно, это можно сделать, но является ли это обычным способом обработки вложенных маршрутов и ресурсов? Код, который у меня есть в действии индекса для контроллера тегов, выглядит следующим образом:
TagsController.rb
def index
if params[:post_id] && @post = Post.find_by_id(params[:post_id])
@tags = Post.find_by_id(params[:post_id]).tags
else
@tags = Tag.order(:name)
end
respond_to do |format|
format.html
format.json {render json: @tags.tokens(params[:q]) }
end
end
Я вижу, что код в этом контроллере становится все более значительным, поскольку я планирую, что многие дополнительные ресурсы будут связаны с ресурсами тегов. Мысли о том, как это сделать?
Сводка вопросов:
- Если ресурс вложен, должен ли вложенный ресурс проходить через другой контроллер, представляющий вложенный ресурс? Это противоречит прохождению нормального контроллера, поскольку я нахожусь в примере кода, который я предоставил.
- Если да, то каким образом эти контроллеры должны быть названы и настроены?
Сообщите мне, если вам нужна дополнительная информация.