2012-04-02 7 views
17

Na stronie ActiveAdmin chciałbym umieścić link do listy powiązanych zasobów. Na przykład, biorąc pod uwagę, że witryna zawierała wiele sekcji i sekcję należy do witryny (w moich modelach ActiveRecord), chciałbym, aby moja strona witryny zawierała odsyłacz do sekcji w witrynie, który byłby wyświetlany na stronie indeksu przekrojów, z Ustawienie wstępne filtra witryny.ActiveAdmin - generowanie linku do indeksu z ustawionym filtrem?

Pamiętaj, że robię , a nie chcę używać funkcji belongs_to ActiveAdmin; Nie chcę zagnieżdżonych zasobów z wielu powodów (głębokość zagnieżdżenia> 2, a także problemy z użytecznością). Chcę wygenerować adres URL podobny do tego, który generuje ActiveAdmin, gdy najpierw przejdę na stronę indeksu Sekcji, a następnie przefiltruję według witryny.

Lista parametrów zapytania wygenerowana przez funkcję filtrowania ActiveAdmin jest szalona; czy istnieje metoda pomocnicza, której mogłem użyć, aby osiągnąć ten cel?

Dzięki!

Odpowiedz

20

Opracowałem dość satysfakcjonujące rozwiązanie, po trochę pogawędce w meta_search. Składnia jest nieco niezgrabna, ale działa.

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

Dzięki, działa jak urok! – rogerkk

+0

Jako dodatkowa uwaga może to również działać z relacjami HABTM.Sekcja ''q [site_id_eq]' 'musi być pluralizowana, więc coś takiego:'' q [sites_id_eq] '' – ScottJShea

3

Jak jgshurts wskazał, sztuką jest określenie, który parametr q[site_id_eq] zapytania.

Jednakże, jeśli nie podoba składni przylegający, można też po prostu użyć pomocnika ścieżki:

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

UrlHelper#link_to documentation pokazuje dodatkowe przykłady.

17

używam tej składni:

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

Znacznie lepsze rozwiązanie niż odpowiedź jgshurtsa – pragma

+1

To jest najlepsze rozwiązanie. – ahmacleod

1

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

automatycznie łączy obiekty do swoich kontrolerów zasobów. Jeśli zasób nie został zarejestrowany, zwracana jest ciąg znaków obiektu .

Zawartość domyślna w linku jest zwracany z ActiveAdmin::ViewHelpers::DisplayHelper#display_name

można przekazać w treści do wyświetlenia

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

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

Uwaga: To jest testowany z ActiveAdmin (v1.1.0 i 2.0.0.alpha)
Nadzieja ta współpracuje z drugiej wersji. Zaktualizuj tę odpowiedź, jeśli masz pewność, że działa z innymi znanymi wersjami.