2013-03-11 36 views
7

Tôi có một bộ lọcactiveadmin: lọc bộ nhớ cache giá trị

#in cities.rb 

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

Nó danh sách gần như tĩnh, tôi cần phải cache nó cho năng suất tốt hơn

Tôi đã thử

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

Cảm ơn bạn

Trả lời

1

Hãy thử một cái gì đó như thế này:

EDIT: Tôi đã thay đổi mẫu mã dựa trên phản hồi nhận xét.

EDIT: Tôi đã cập nhật mẫu để bao gồm tạo 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

tôi cần cache toàn bộ html không chọn bộ sưu tập đối tượng để chọn hiển thị sau .. trong logic của mình tôi có thể tạo thứ gì đó như 'Thành phố :: COUNTRIES = ['Argentina', 'Belize', ...] 'và sử dụng nó - nó không phải là trường hợp của tôi .. tôi cần bộ nhớ cache với tất cả các khả năng của nó: hết hạn, vô hiệu hóa trong môi trường dev như vậy .. – okliv

+0

Ah, đó là một chút tham gia nhiều hơn. Đặc biệt là phần hết hạn. Tôi khuyên bạn nên xem [[Rails.cache.fetch'] (http://api.rubyonrails.org/classes/ActiveSupport/Cache/Store.html#method-i-fetch) Oh heck, I ' sẽ thử chỉnh sửa câu trả lời của tôi. –

0

Bây giờ bạn có một lựa chọn tốt hơn, bạn có thể sử dụng AJAX filters!

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

trông đầy hứa hẹn, bất kỳ cơ hội nào để xem ví dụ? – okliv

+0

Bạn có nghĩa là ví dụ trực tiếp không? Ý tưởng hay, tôi sẽ xem xét – Alexander

Các vấn đề liên quan