mam następujące modele:Railsy zagnieżdżonych zasobów i routingu - jak rozdzielić kontrolery?
- post
- Tag
- TaggedPost (z którego postu i Tag czerpią swoje skojarzenia przez has_many: through)
i mam następujący routes.rb
plik :
resources :tags
resources :posts do
resources :tags
end
Kiedy więc n avigate to, powiedzmy, /posts/4/tags
, które wykona akcję indeksu dla kontrolera tagów z wartością post_id
ustawioną w tablicy parametrów. Chłodny.
Moje pytanie brzmi jednak, kiedy mam dostęp do zasobu tagów zagnieżdżonych pod postami, czy powinienem trafić jeszcze do kontrolera Tagów? Czy powinienem ustawić inny kontroler, aby obsłużyć zagnieżdżony charakter tagów w tym momencie? W przeciwnym razie muszę stworzyć dodatkową logikę do kontrolera tagów. Można to oczywiście zrobić, ale czy jest to powszechny sposób obsługi zagnieżdżonych tras i zasobów? Kod mam w akcji indeksu dla regulatora Tagi przedstawia się następująco:
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ę kod w tym kontrolerze coraz bardziej duża, jak zaplanować wiele dodatkowych zasoby powiązane z zasobami znaczników. Myśli o tym, jak to przełamać?
Zestawienie pytań:
- Jeżeli zasób jest zagnieżdżony, powinien być zagnieżdżony zasób przeżywa innego kontrolera reprezentującego zagnieżdżony charakteru zasobu? Jest to sprzeczne z przechodzeniem przez normalny kontroler, tak jak ja w podanym przykładzie kodu.
- Jeśli tak, w jaki sposób powinny być one nazwane i skonfigurowane?
Daj mi znać, jeśli potrzebujesz więcej informacji.
To właściwie odpowiada na rdzeń mojego pytania ... Sądzę, że logistyka inna niż to naprawdę zależy od moich obsesyjno-kompulsywnych potrzeb organizacyjnych. –
Proszę, ze względu na swoich przyszłych kolegów (i ty futur futurystyczny!), Przeczytaj też odpowiedź @lazel! – gfd
Zdobycie kilku ciężko zarobionych punktów podczas głosowania w dół. Proszę, dodaj zagnieżdżony kontroler. – Drenmi