Mam zagnieżdżony zasób Bar
należący do Foo
. Mogę wyświetlić listę wszystkich obiektów Bar
należących do danego Foo
. Ale chcę również móc wygenerować widok ze wszystkimi wymienionymi razem obiektami Bar
, z dowolnego obiektu, do którego należą.Szyny 4 - jak dodać trasę indeksu dla zagnieżdżonego zasobu, aby wyświetlić listę wszystkich elementów niezależnych od zasobu nadrzędnego
Struktura modelu jest:
# app/models/foo.rb
class Foo < ActiveRecord
has_many :bars
end
# app/models/bar.rb
class Bar < ActiveRecord
belongs_to :foo
end
Routing jest zdefiniowany jako:
# config/routes.rb
resources :foos do
resources :bars
end
uzyskać oczekiwanych tras z tej konfiguracji:
foo_bars GET /foos/:foo_id/bars(.:format) bars#index
POST /foos/:foo_id/bars(.:format) bars#create
new_foo_bar GET /foos/:foo_id/bars/new(.:format) bars#new
edit_bar GET /bars/:id/edit(.:format) bars#edit
bar GET /bars/:id(.:format) bars#show
PATCH /bars/:id(.:format) bars#update
PUT /bars/:id(.:format) bars#update
DELETE /bars/:id(.:format) bars#destroy
foos GET /foos(.:format) foos#index
POST /foos(.:format) foos#create
new_foo GET /foos/new(.:format) foos#new
edit_foo GET /foos/:id/edit(.:format) foos#edit
foo GET /foos/:id(.:format) foos#show
PATCH /foos/:id(.:format) foos#update
PUT /foos/:id(.:format) foos#update
DELETE /foos/:id(.:format) foos#destroy
Co potrzebne jest do wygenerować trasę dla bars#index
, która nie jest objęta zakresem w kontekście foo
. Innymi słowy, w istocie chcą:
bars GET /bars(.:format) bars#index
Próbowałem przy użyciu płytkie opcję, a więc:
# config/routes.rb
resources :foos, shallow: true do
resources :bars
end
Jednak to nie obsługuje: akcji indeksu, za tym documentation.
Jaki jest najlepszy sposób na zrobienie tego? Istnieje przydatna dyskusja Stack overflow here, przy użyciu before_filter
do określenia zasięgu - ale jest to od 2009 roku. Doceń wszelkie konkretne wskazówki, jak poprawnie skonfigurować zarówno kontroler, jak i plik config/routes.rb
!
Dodanie 'resources: bars' oddzielnie nie działa? –