2012-05-09 16 views
6

मेरे ActiveAdmin मॉडल में मेरे पास हटाए गए रिकॉर्ड और विशिष्ट कॉलम द्वारा रिकॉर्ड खोजने के लिए कई फ़िल्टर दिखाने के लिए एक कस्टम दायरा है।ActiveAdmin - फ़िल्टर के साथ स्कोप का उपयोग

व्यक्तिगत रूप से या संयुक्त रूप से फ़िल्टर का उपयोग करके अपेक्षित कार्य करता है।

एक दायरे का उपयोग अपेक्षित के रूप में काम करता है।

समस्या यह है कि एक दायरे का उपयोग करके सभी फ़िल्टर ओवरराइड होते हैं और एक दायरा चुनने के बाद कोई भी फ़िल्टर जोड़ा जाता है।

किसी के पास कोई विचार है? मैं जो चाहता हूं वह एक विशिष्ट दायरा दिखाने में सक्षम होना है और फिर भी उस दायरे के भीतर परिणाम फ़िल्टर करने में सक्षम होना है।

ActiveAdmin.register Example do 
     scope :deleted do |example| 
     Example.only_deleted 
     end 

     scope :all do |example| 
     Example.with_deleted 
     end 

     filter :title 
     filter :description 

     index do 
     column :title 
     column :description 
     end 

    end 

[अद्यतन]

यहाँ समाधान मैं के साथ चला गया है। मैंने मॉडल पर with_deleted स्कोप सेट किया है और हटाए गए परिणामों को दिखाने/छिपाने के लिए पक्ष में फ़िल्टर शामिल किया है। प्रारंभिक रूप से हटाए गए परिणामों को भी दिखाया जाने वाला आदर्श नहीं है, लेकिन कम से कम सभी फ़िल्टरों का एक साथ उपयोग किया जा सकता है।

ActiveAdmin.register Example.with_deleted do 

     filter :title 
     filter :description 
     filter :deleted, :as => :select, :collection => {:true => nil, :false => false } 

     index do 
     column :title 
     column :description 
     end 

    end 
+0

इसी लेकिन नकल नहीं: http://stackoverflow.com/questions/12038138/how -to-filter-is-null-in-activeadmin –

+0

वर्तमान सक्रिय व्यवस्थापक में अब कोई समस्या नहीं है – MikDiet

उत्तर

0

दायरे के बजाय एक और फ़िल्टर बनाएं जो मानदंडों पर रिकॉर्ड का चयन करेगा यदि उदाहरण हटा दिए गए हैं या सभी। और जितना चाहें उतने फ़िल्टर को लागू करें।

या चयनकर्ता की गणना करते समय फ़िल्टर में, जिस पर आप फ़िल्टर चलाएंगे, तदनुसार दायरे को चलाएं और फिर उस चयनकर्ता पर फ़िल्टर स्थितियां रखें।

0

डिफ़ॉल्ट रूप से, ActiveAdmin स्कॉप्स को केवल प्रतीकात्मक विधि नाम प्रदान करने के लिए चाहता है। जब आप इस तरह के क्षेत्रों को परिभाषित करते हैं, तो उन्हें फ़िल्टर द्वारा पहले से प्रदान किए गए स्कोपिंग के लिए जंजीर किया जा सकता है और वे एक साथ काम करते हैं।

तो आपकी गलती (वर्तमान मॉडल के निहित मालिक के साथ) प्रदान करने के बजाय स्पष्ट रूप से Model#class_method पर कॉल कर रही है।

फिल्टर और स्कोप साथ काम करेंगे अगर आप इस कोड को बदलने:

scope :all do |example| 
    Example.with_deleted 
end 

scope :deleted do |example| 
    Example.only_deleted 
end 
इस के साथ

:

scope "Deleted", :only_deleted 
scope "All", :with_deleted 
+1

पांच साल बाद, ActiveAdmin दस्तावेज़ अभी भी इसका समाधान नहीं करते हैं। इससे पहले कि मैंने इसे समझ लिया, मैं उसी समस्या में भाग गया। – armchairdj

संबंधित मुद्दे