2012-04-02 4 views
17

In una pagina ActiveAdmin, vorrei includere un collegamento a un elenco di risorse correlate. Ad esempio, dato che un sito ha diverse parti e una sezione appartiene a un sito (nei miei modelli ActiveRecord), vorrei che la mia pagina di visualizzazione del sito includesse un collegamento alle sezioni all'interno del sito, che andassero alla pagina dell'indice della sezione, con il Preset del filtro del sito.ActiveAdmin - genera il collegamento all'indice, con il filtro preimpostato?

Nota che faccio non desidera utilizzare la funzione belongs_to di ActiveAdmin; Non voglio risorse nidificate per una serie di motivi (profondità di nidificazione> 2, nonché problemi di usabilità). Quello che voglio è generare un URL simile a quello che ActiveAdmin genera se per prima cosa vado alla pagina dell'indice Sections e poi filtra per sito.

L'elenco dei parametri di query generato dalla funzione di filtro di ActiveAdmin è piuttosto folle; c'è un metodo di supporto che potrei usare per raggiungere questo obiettivo?

Grazie!

risposta

20

Ho elaborato una soluzione abbastanza soddisfacente dopo aver frugato un po 'in meta_search. La sintassi è un po 'grossolana, ma fa il trucco.

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

Grazie, funziona come un fascino! – rogerkk

+0

Come nota aggiuntiva, questo può funzionare anche con le relazioni HABTM.La sezione ''q [site_id_eq]' 'deve essere pluralizzata in modo simile a questo:'' q [sites_id_eq] '' – ScottJShea

3

Come jgshurts sottolineato, il trucco è identificare quel parametro q[site_id_eq] query.

Tuttavia, se non ti piace la sintassi goffo, si può anche semplicemente utilizzare un aiutante percorso:

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

Il UrlHelper#link_to documentation mostra ulteriori esempi di questo.

17

Io uso questa sintassi:

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

Soluzione molto migliore della risposta di jgshurts – pragma

+1

Questa è la soluzione migliore. – ahmacleod

1

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

collega automaticamente gli oggetti da loro controllori di risorse. Se la risorsa non è stata registrata, viene restituita una rappresentazione di stringa dell'oggetto .

Il contenuto di default nel collegamento viene restituito da ActiveAdmin::ViewHelpers::DisplayHelper#display_name

È possibile passare nel contenuto da visualizzare

esempio: 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 

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

Nota: Questo è testato con ActiveAdmin (v1.1.0 e 2.0.0.alpha)
Spero che questo funziona con altre versioni pure. Si prega di aggiornare questa risposta se si è sicuri che funzioni con altre versioni che conosci.