2012-04-02 17 views
17

En una página de ActiveAdmin, me gustaría incluir un enlace a una lista de recursos relacionados. Por ejemplo, dado que un sitio tiene muchas secciones y una sección pertenece a un sitio (en mis modelos de ActiveRecord), me gustaría que mi página de mostrar sitio incluyera un enlace a las secciones dentro del sitio, que iría a la página de índice de sección, con el Preestablecimiento del filtro del sitio.ActiveAdmin - ¿generar enlace a índice, con preajuste de filtro?

Tenga en cuenta que hago no quiero usar la función belongs_to de ActiveAdmin; No quiero recursos anidados por una serie de razones (profundidad de anidación> 2, así como las preocupaciones de usabilidad). Lo que quiero es generar una URL similar a la que ActiveAdmin genera si primero voy a la página de índice de Secciones y luego filtrar por Sitio.

La lista de parámetros de consulta generada por la función de filtrado de ActiveAdmin es bastante loca; ¿Hay algún método de ayuda que pueda usar para lograr este objetivo?

Gracias!

Respuesta

20

He resuelto una solución razonablemente satisfactoria después de hurgar en meta_search por un tiempo. La sintaxis es un poco torpe, pero hace el truco.

index do 
    ... 
    column "Sections" do |site| 
    link_to "Sections (#{site.sections.count})", :controller => "sections", :action => "index", 'q[site_id_eq]' => "#{site.id}".html_safe 
    end 
end 
+0

¡Gracias, funciona como un encanto! – rogerkk

+0

Como nota adicional, esto también puede funcionar con las relaciones HABTM.La sección '' q [site_id_eq] ''necesita ser pluralizada así que algo como esto:'' q [sites_id_eq] '' – ScottJShea

3

Como jgshurts señalaron, el truco es identificar ese parámetro q[site_id_eq] consulta.

Sin embargo, si no te gusta la sintaxis torpe, también puede simplemente usar un ayudante ruta:

link_to "Sections (#{site.sections.count})", admin_sections_path('q[site_id_eq]' => site.id) 

El UrlHelper#link_to documentation muestra ejemplos adicionales de este.

17

que utiliza esta sintaxis:

link_to "Section", admin_sections_path(q: { site_id_eq: site.id}) 
+1

Solución mucho mejor que la respuesta de jgshurts – pragma

+1

Esta es la mejor solución. – ahmacleod

1

#auto_link(resource, content = display_name(resource)) ⇒ Object

enlaces automáticamente objetos a sus controladores de recursos. Si el recurso no se ha registrado, se devuelve una representación de cadena del objeto .

el contenido predeterminado en el enlace se devuelve desde ActiveAdmin::ViewHelpers::DisplayHelper#display_name

Puede pasar en el contenido para mostrar

por ejemplo: auto_link(@post, "My Link")

ActiveAdmin.register Girl do 
    index do 
    selectable_column 

    column :name do |girl| 
     auto_link(girl, girl.name) 
    end 

    column :email 
    column :created_at 
    actions 
    end 

Útil-link: http://www.rubydoc.info/github/gregbell/active_admin/ActiveAdmin/ViewHelpers/AutoLinkHelper

Nota: Esto se prueba con ActiveAdmin (v1.1.0 y 2.0.0.alpha)
Hope esto funciona con otra versión también. Actualice esta respuesta si está seguro de que funciona con otras versiones que conoce.

Cuestiones relacionadas