2012-11-16 6 views
10

Quando show una risorsa utilizza la gemma Rails ActiveAdmin, voglio mostrare una tabella di un altro modello associato.Rails ActiveAdmin: mostra la tabella di una risorsa correlata nella stessa vista

Quindi diciamo un Wineryhas_many:products. Ora voglio mostrare i prodotti associati nella pagina show della risorsa di amministrazione Winery. E voglio che sia una tabella simile a quella che otterrei sullo index della risorsa Products.

Ho ottenuto il suo funzionamento, ma solo ricreando manualmente la struttura HTML, che tipo di schifo. Esiste un modo più semplice per creare una vista stile tabella index per un sottoinsieme specifico di una risorsa associata?

Quello che ho, che aspira pò:

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 

risposta

15

Per risolvere questo problema, abbiamo utilizzato parziali:

/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

Grazie, penso 'table_for (collezione)' era il pezzo mancante logica. –

+0

questo mi ha aiutato a rispondere [this] (http://stackoverflow.com/questions/35236752/how-do-you-add-a-second-column-of-children-without-duplicating-the-parent-co/35256690 # 35256690) QUINTA DOMANDA. Grazie :) – MilesStanfield

+0

Grazie fantastici per un post fantastico. –

Problemi correlati