Rails zagnieżdżone zasoby i routing - jak rozbić kontrolery?
Mam następujące modele:
SłupekEtykietkaTaggedPost (z którego Post i Tag czerpią swoje skojarzenia przez has_many: through)I mam następująceroutes.rb
plik:
resources :tags
resources :posts do
resources :tags
end
Więc kiedy nawiguję, powiedzmy,/posts/4/tags
, który zastrzeli mnie w akcji indeksu dla kontrolera Tag za pomocąpost_id
wartość ustawiona w tablicy parametrów. Fajne.
Moje pytanie brzmi jednak, teraz, gdy mam dostęp do zasobu zagnieżdżonych tagów w postach, czy powinienem nadal naciskać kontroler Tags? A może powinienem skonfigurować inny kontroler do obsługi zagnieżdżonej natury tagów w tym momencie? W przeciwnym razie muszę zbudować dodatkową logikę w kontrolerze Tags. Można to zrobić oczywiście, ale czy jest to powszechny sposób obsługi zagnieżdżonych tras i zasobów? Kod, który mam w akcji indeksu dla kontrolera Tags, jest następujący:
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
Widzę, że kod w tym kontrolerze staje się coraz większy, ponieważ planuję powiązanie wielu dodatkowych zasobów z zasobami znaczników. Myśli o tym, jak to zrobić?
Podsumowanie pytań:
Jeśli zasób jest zagnieżdżony, czy zagnieżdżony zasób powinien przechodzić przez inny kontroler reprezentujący zagnieżdżony charakter zasobu? Jest to przeciwne przejściu przez normalny kontroler, jak w przykładowym kodzie, który podałem.Jeśli tak, w jaki sposób należy nazwać i skonfigurować te kontrolery?Daj mi znać, jeśli potrzebujesz więcej informacji.