2015-08-01 21 views
6

ana kaynağından bağımsız tüm öğeleri listelemek için Foo'a ait iç içe geçmiş kaynak Bar var. Herhangi bir Foo'a ait olan tüm Bar nesnelerini başarıyla listeleyebilirim. Ama aynı zamanda, ait oldukları Foo nesnesinden, birlikte listelenen Bar öğeyle birlikte bir görünüm oluşturabilmek istiyorum.Raylar 4 - Bir iç kaynak için dizin indeksini nasıl eklerim?

modeli yapısı şöyledir:

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 

Benim ihtiyacım şudur: Ben bu yapılandırmasından beklenen yolları alabilirsiniz

# config/routes.rb 
resources :foos do 
    resources :bars 
end 

: olarak

# app/models/foo.rb 
class Foo < ActiveRecord 
    has_many :bars 
end 

# app/models/bar.rb 
class Bar < ActiveRecord 
    belongs_to :foo 
end 

yönlendirme tanımlanırbağlamında kapsam dışı olan bars#index için bir yol oluşturmak. Diğer bir deyişle, ben aslında istiyorum: Ben sığ seçeneği kullanılarak denedim

bars GET /bars(.:format)  bars#index 

, böylece: documentation başına endeks eylemi:

# config/routes.rb 
resources :foos, shallow: true do 
    resources :bars 
end 

Ancak bu desteklemez.

Bunu yapmanın en iyi yolu nedir? Kapsamı belirlemek için bir before_filter kullanarak here yararlı bir Yığın Taşması tartışması vardır, ancak 2009'dan beri. Hem denetleyicinin hem de config/routes.rb dosyasının uygun şekilde nasıl kurulacağına dair herhangi bir özel kılavuz için teşekkür ederiz!

+0

'Kaynaklar: barlar 'ayrı ayrı eklenmiyor mu? –

cevap

4

Eğer kapsamlı endeks yöntemini foo_bars ve ayrı bars rota/view tutmak istiyorsanız:

get 'bars' => 'bars#index', as: :bars 

olarak bars kumanda içinde indeks yöntemi ayarlayın:

routes.rb özel bir rota oluşturma Bağlantınızda ya da basitçe açıklandığı gibi:

Sonra bir bars görünümü dir (eğer yoksa) ve index.html.erb.


Eğer kapsamlı endeks yöntemi foo_bars tutmak istemiyorsanız: yuvalanmış endeksi dışlamak için

get 'bars' => 'bars#index', as: :bars 

düzenleyin mevcut yolları:

routes.rb özel bir rota oluşturma

resources :foos do 
    resources :bars, except: :index 
end 

O zaman bars contr oller sadece olabilir:

def index 
    @bars = Bar.all 
end 

Sonra bars görünüm dizini oluşturmak ve index.html.erb (eğer yoksa).