2014-07-10 9 views
6

सक्रिय व्यवस्थापक अभी तक कई कॉलम सॉर्टिंग का समर्थन नहीं करता है (यानी config.sortable विकल्प पर एकाधिक मान पास करें)। मैंने एक पुराना बंदर पैच here देखा लेकिन यह मेरे संस्करण (1.0.0.pre से Github) के साथ काम नहीं कर रहा है।सक्रिय व्यवस्थापक: एकाधिक कॉलम पर सॉर्टिंग

क्या नवीनतम सक्रिय व्यवस्थापक संस्करण पर एकाधिक क्रमबद्ध कॉलम प्राप्त करने का कोई तरीका है?

config/initializers में या lib फ़ोल्डर में एक नया फ़ाइल बनाएँ: multiple_columns_sorting.rb

module ActiveAdmin 
    class ResourceController < BaseController 
    module DataAccess 
     def apply_sorting(chain) 
     params[:order] ||= active_admin_config.sort_order 

     orders = [] 
     params[:order].split('_and_').each do |fragment| 
      order_clause = OrderClause.new fragment 
      if order_clause.valid? 
      orders << order_clause.to_sql(active_admin_config) 
      end 
     end 

     if orders.empty? 
      chain 
     else 
      chain.reorder(orders.shift).order(orders) 
     end 
     end 
    end 
    end 
end 

पुनरारंभ सर्वर

उत्तर

14

यह भी एक बंदर पैच है। अब आप "_and_" द्वारा कई कॉलम नामों का उपयोग कर सकते हैं। उदाहरण के लिए:

config.sort_order = 'first_name_desc_and_last_name_asc' 
+0

क्षमा करें, मैं उपहार देने के लिए भूल गया। –

+0

धन्यवाद, बैस्टियन लियोनार्ड। :) – nistvan

5

ActiveAdmin v0.6.0 के लिए, मैं इस

# initializers/active_admin.rb 
module ActiveAdmin 
    class ResourceController 
    module DataAccess 
     def apply_sorting(chain) 
     params[:order] ||= active_admin_config.sort_order 

     orders = [] 
     params[:order].present? && params[:order].split(/\s*,\s*/).each do |fragment| 
      fragment =~ /^([\w\_\.]+)_(desc|asc)$/ 
      column = $1 
      order = $2 
      table = active_admin_config.resource_column_names.include?(column) ? active_admin_config.resource_table_name : nil 
      table_column = (column =~ /\./) ? column : 
      [table, active_admin_config.resource_quoted_column_name(column)].compact.join(".") 

      orders << "#{table_column} #{order}" 
     end 

     if orders.empty? 
      chain 
     else 
      chain.reorder(orders.shift).order(orders) 
     end 
     end 
    end 
    end 
end 

मेरे मामले के लिए की तरह कुछ करने के लिए बंदर पैच फेरबदल, मैं इसे निम्नलिखित के रूप में यह मेरे लिए अधिक स्वाभाविक है के रूप में प्रयोग करेंगे:

config.sort_order = 'first_name_desc, last_name_asc' 

विवरण मेरी सार से https://gist.github.com/anhkind/5e9d849ebe4f3a452e31

1

खैर हैं अगर इसकी सिर्फ 1 या 2 क्षेत्रों y कहां अपडेट करना चाहते हैं, तो आप इसे इस तरह कर सकते हैं। अपने सक्रिय व्यवस्थापक नियंत्रक में बस इस विधि का उपयोग करें। सॉर्टिंग के लिए पूर्ण_नाम पास करते समय, यह विधि सॉर्टिंग के लिए first_name और last_name कॉलम का उपयोग करती है।

def apply_sorting(chain) 
     params[:order] ||= active_admin_config.sort_order 
     order_clause = ActiveAdmin::OrderClause.new params[:order] 

    if order_clause.field == 'full_name' 
     chain.reorder("(first_name, last_name) #{order_clause.order}") 
    else 
     super 
    end 
end 
संबंधित मुद्दे