2013-03-11 16 views
7

Mam filtractiveadmin

#in cities.rb 

    filter :country #drop-down select list with more than 200 values 

To lista prawie statyczne, muszę go w pamięci podręcznej dla lepszej wydajności

próbowałem

filter :country, :collection=>proc{cache {options_from_collection_for_select(Country.all, :id, :name)}} #no luck 

dziękuję

:

Odpowiedz

1

Spróbuj czegoś takiego:

EDIT: Zmieniłem próbki kodu na podstawie komentarzy do komentarzy.

EDYCJA: Zaktualizowałem próbkę, aby uwzględnić generowanie html.

# In activeadmin 
filter :country, :collection => proc do 
    Rails.cache.fetch('countries_for_select') do 
    options_from_collection_for_select(Country.all, :id, :name)} 
    end 
end 

# Somewhere, when you want to expire the cache 
Rails.cache.delete('countries_for_select') 
+0

muszę buforować cały html wybrać nie zbiór przedmiotów na później wybierz renderowania .. w logice mogę stworzyć coś w rodzaju 'Miasto :: KRAJÓW = [„Argentyna”,„Belize”, ...] 'i używaj go - nie jest to mój przypadek .. potrzebuję pamięci podręcznej z wszystkimi jej możliwościami: wygasanie, wyłączanie w środowisku deweloperskim itd. – okliv

+0

Ah, to trochę bardziej zaangażowane. Zwłaszcza wygasająca część. Polecam zaglądanie do ['Rails.cache.fetch'] (http://api.rubyonrails.org/classes/ActiveSupport/Cache/Store.html#method-i-fetch) Och, cholera, ja ' Spróbuję edytować moją odpowiedź. –

0

Teraz masz lepszą opcją, można użyć AJAX filters!

filter :country, as: :ajax_select, data: { search_fields: [:name] } 
+1

wygląda obiecująco, masz szansę zobaczyć przykład? – okliv

+0

Masz na myśli przykład na żywo? Dobry pomysł, przyjrzę się – Alexander