2012-04-26 12 views
5

tengo Paquetes, que tienen múltiples componentes (ligados utilizando un has_many través de paquetes)ActiveAdmin en Show método

En ActiveAdmin, cuando muestro un paquete que quiero ser capaz de mostrar todos los componentes vinculados a ella

así que tengo una demostración del método de la siguiente manera:

show do 
attributes_table do 
    row :description 

    row 'Components' do |n| 
    package.components.each do |component| 
     #debugger 
     component.name 
    end 
    end 
end 
end 

Cuando puedo mostrar la página, se muestra la versión completa de cada registro, es decir, (una de las cuales muestro a continuación, pero no habrá tantos como hay Componentes):

[#<Component id: 2, component_token: "6e9be0b0-71c0-012f-d523-00254bca74c4", name: "Exercise Module", description: "This is the exercise module", created_at: "2012-04-26 11:25:20", updated_at: "2012-04-26 11:25:20">] 

Cuando detengo el depurador en el punto que lo he comentado, el valor de component.name se da como "Módulo de ejercicio", pero eso no es lo que se muestra en el programa; de hecho, ActiveAdmin parece ignore todo en ese | componente | bloquear.

¿Cómo se muestran los atributos del registro, y no todo el registro en sí?

Gracias

+0

prueba 'concat component.name' – alony

+0

que arroja un método indefinido' << 'para nil: error de NilClass, aunque no entiendo cómo funcionaría concat – Mitch

+0

a veces ActiveAdmin ignora todo en los iteradores, y necesita 'concat'. De todos modos encontré una mejor solución en la respuesta :) – alony

Respuesta

15

Está sucediendo porque la fila muestra la salida de esta línea package.components.each {|component| ... } y esa es la colección

Prueba esto:

show do 

attributes_table do 
    row :description 

    row 'Components' do |n| 
    package.components.map(&:name).join("<br />").html_safe 
    end 
end 

end 

o cualquier otro unen a la cadena prefiere :)

+0

Eso funciona, gracias, aunque todavía no entiendo por qué el | componente | bloque no escupe los valores ... pero esto me va a hacer bien! – Mitch

+0

probablemente la fila solo llame al bloque y represente lo que devuelva, y en nuestro caso devuelve la última línea, todo lo que devuelve el iterador. de hecho, su ejemplo también funcionará si cambia 'each' por' map', pero deberá resolver algunos problemas de formato – alony

+0

¡Gracias por todo eso, muy apreciado! – Mitch