2012-11-16 18 views
10

Po dodaniu zasobu za pomocą gem Rails ActiveAdmin, chcę wyświetlić tabelę innego skojarzonego modelu.Rails ActiveAdmin: wyświetlanie tabeli pokrewnego zasobu w tym samym widoku

Załóżmy, że Wineryhas_many:products. Teraz chcę pokazać produkty powiązane na stronie show zasobu administratora Winery. Chcę, aby była to tabela podobna do tej, którą uzyskałbym na index z zasobu .

Mam go do pracy, ale tylko poprzez ręczne odtworzenie struktury HTML, która jest do dupy. Czy istnieje bardziej przejrzysty sposób tworzenia widoku tabeli w stylu index dla określonego podzbioru skojarzonego zasobu?

co mam, które trochę do bani:

show title: :name do |winery| 
    attributes_table do 
    row :name 
    row(:region) { |o| o.region.name } 
    rows :primary_contact, :description 
    end 

    # This is the part that sucks. 
    div class: 'panel' do 
    h3 'Products' 
    div class: 'attributes_table' do 
     table do 
     tr do 
      th 'Name' 
      th 'Vintage' 
      th 'Varietal' 
     end 
     winery.products.each do |product| 
      tr do 
      td link_to product.name, admin_product_path(product) 
      td product.vintage 
      td product.varietal.name 
      end 
     end 
     end 
    end 
    end 
end 

Odpowiedz

15

Aby rozwiązać ten problem, użyliśmy partials:

/app/admin/wineries.rb

ActiveAdmin.register Winery do 
    show title: :name do 
    render "show", context: self 
    end 
end 

app/admin/products.rb

ActiveAdmin.register Product do 
    belongs_to :winery 
    index do 
    render "index", context: self 
    end 
end 

/app/views/admin/wineries/_show.builder

context.instance_eval do 
    attributes_table do 
    row :name 
    row :region 
    row :primary_contact 
    end 
    render "admin/products/index", products: winery.products, context: self 
    active_admin_comments 
end 

/app/views/admin/products/_index.builder

context.instance_eval do 
    table_for(invoices, :sortable => true, :class => 'index_table') do 
    column :name 
    column :vintage 
    column :varietal 
    default_actions rescue nil # test for responds_to? does not work. 
    end 
end 
+3

Dzięki, myślę 'table_for (kolekcja)' był brakujący kawałek logiczny. –

+0

pomogło mi to odpowiedzieć [to] (http://stackoverflow.com/questions/35236752/how-do-you-add-a-second-column-%children--out-duplicating-tarent-co-/35256690 # 35256690) WIĘCEJ pytanie. Dzięki :) – MilesStanfield

+0

Niesamowite dzięki za fantastyczny post. –

Powiązane problemy