2016-03-23 14 views
1

Aşağıdaki senaryoyu inceleyin: ve show sayfalarında ActiveAdmin sayfalarında bir kaynak var, ve bu sayfada daha fazla Tabs var. Bazı (muhtemelen daha fazla bir) Bir sekmede ActiveAdmin'in gösteri sayfasında sortable tablo nasıl eklenir?

example picture showing four tabs in resource show page

bu Tabs I sütunlara sahip, tablo şeklinde kaynak ile ilgili bilgileri görüntülemek için istiyoruz. Ayrıca, tabloların sıralama düzenini değiştirirken uygulamanın seçilen Tab'da kalmasını da isterim.

Bu, ActiveAdmin'da nasıl başarılır?

cevap

3

Ne yazık ki ActiveAdmin bu kutuyu desteklemiyor gibi görünüyor, ancak elde edilebilir.

tab "Tab 2" do 
    table_for resource.some_connection do 
    column :name 
    ... 
    end 
end 

Ne yazık ki bu bir sıralanabilir bir tablodur değil, bu yüzden biz sadece aşağıdaki seçenek karma eklemek gerekir: (genellikle lib/admin/resource.rb olarak) ActiveAdmin.register çağrı bu resource 'ın some_connection veriler için bir tablo yaratacak içinde

:

{:sortable => true, :class => 'index_table'} 

şöyle:

table_for resource.some_connection, {:sortable => true, :class => 'index_table'} do 

Bu neredeyse işe yarayacak. Ne yazık ki bir sıralama sütunu seçmeniz sizi ilk Tab adresine geri götürecektir, ancak sıralama URL'de saklanacaktır (whatever/your/page/address/is?order=name_asc biçiminde).

module ActiveAdmin 
    module Views 
    class TableFor 

     def build(obj, *attrs) 
     options   = attrs.extract_options! 
     @sortable  = options.delete(:sortable) 
     @collection  = obj.respond_to?(:each) && !obj.is_a?(Hash) ? obj : [obj] 
     @resource_class = options.delete(:i18n) 
     @resource_class ||= @collection.klass if @collection.respond_to? :klass 
     @columns  = [] 
     @row_class  = options.delete(:row_class) 
     @anchor   = options.delete(:anchor) 
     @sort_key_prefix = '' 
     @sort_key_prefix = @anchor.to_s + '_' unless @anchor.nil? 

     build_table 
     super(options) 
     columns(*attrs) 
     end 

     def build_table_header(col) 
     classes = Arbre::HTML::ClassList.new 

     sort_key = sortable? && col.sortable? && col.sort_key 

     params = request.query_parameters.except :page, :order, :commit, :format 

     classes << 'sortable'       if sort_key 
     classes << "sorted-#{current_sort[1]}"  if sort_key && current_sort[0] == @sort_key_prefix + sort_key 
     classes << col.html_class 

     if sort_key 
      th class: classes do 
      link_to col.pretty_title, params: params, order: "#{@sort_key_prefix}#{sort_key}_#{order_for_sort_key(@sort_key_prefix + sort_key)}", anchor: @anchor 
      end 
     else 
      th col.pretty_title, class: classes 
     end 
     end 

    end 
    end 
end 

Temelde ben seçeneklerinde bir çapa parametresini eklendi ve masa sonra nerede olduğunu sekmeye geri alabilirsiniz bu kullanarak:

aşağıdaki bu sorunu ben maymun-yamalı ActiveAdmin's TableFor sınıfını çözmek için bir sıralama kriteri seçerek. Bu ölçütün adı, bu bağlantı ile bir önek olarak genişletilir, böylece farklı sekmelerde aynı şekilde adlandırılan sütunlara sahip olmak, farklı tabloların sıralamasını bozmaz. (Şu anda bağlantıyı önek olarak kullanıyorum, ancak bu, bir daha Tab)

'u desteklemek için tamamen ayrı bir seçenek parametresine dönüştürülebilir. Maymun düzeltme ekini yüklemek için bir başlatıcı kullanıyorum. yukarıdan kodu:

monkey_patches.rb 
----------------- 
require 'ext/active_admin/views/table_for' 

Bu değişiklikler hafifçe biz tablo oluşturmak yolu değiştirmek gerektiriyor (biz params itibaren sıralama ayarlarını almak ve verilerimize bunları uygulamak zorunda):

tab_name = "Tab 2" 
tab tab_name do 
    tab_anchor = tab_name.parameterize('_') 

    data = resource.some_conection 
    unless params['order'].nil? 
    order = params['order'].to_s.sub(tab_anchor + '_', '').sub("_asc", " ASC").sub("_desc", " DESC") 
    data = data.order(order) unless order.nil? 
    end 

    table_for data, { anchor: tab_anchor, :sortable => true, :class => 'index_table'} do 
    column :name 
    ... 
    end 
end 

Example sortable table in Tab

:Bu (buna anchor puan burada tablo aslında bir Panel konur ve) sonucudur
İlgili konular