2012-01-28 11 views
6

मैं सभी परिणामों के बजाय current_user के परिणामों को प्रदर्शित करने के लिए ActiveAdmin नियंत्रक की अनुक्रमणिका कार्रवाई को ओवरराइड करने का प्रयास कर रहा हूं।ActiveAdmin: इंडेक्स नियंत्रक कार्रवाई को ओवरराइड कैसे करें: शून्य के लिए अपरिभाषित विधि 'आधार': NilClass

controller do 
    def index 
    @user_tasks = UserTask.where(:user_id => current_user.id).page(params[:page]) 
    end 
end 

जब ActiveAdmin, फेंक दिया में एक अपवाद तक पहुँचने:

ActionView::Template::Error (undefined method `base' for nil:NilClass): 
    1: render renderer_for(:index) 

मैं रेल 3.1 और नवीनतम ActiveAdmin संस्करण का उपयोग कर रहा हूँ। gem "activeadmin", :git => 'https://github.com/gregbell/active_admin.git'

उत्तर

4

यह अब और आवश्यक नहीं है।

ActiveAdmin 0.4.4 अब इस विधि को ओवरराइड किए बिना स्कॉइंग क्वेरी का समर्थन करता है। कृपया यहां देखें: http://activeadmin.info/docs/2-resource-customization.html#scoping_the_queries

अपने प्रशासकों विभिन्न पहुँच स्तर है, तो आप कभी कभी गुंजाइश के लिए चाहते हो सकता है कि वे क्या करने के लिए उपयोग कर सकते है। अपने उपयोगकर्ता मॉडल, बस गुंजाइश लिस्टिंग और ढूँढ़ने वाले तो तरह मान लिया जाये कि उचित has_many रिश्तों गया है आप कर सकते हैं:

ActiveAdmin.register Post do 
    scope_to :current_user 

    # or if the association doesn't have the default name. 
    # scope_to :current_user, :association_method => :blog_posts 
end 
+0

बस इस महत्वपूर्ण भेद को जोड़ना: यह जोर देता है कि current_user के साथ एक सहयोग है। यदि उपयोगकर्ता मॉडल के मौजूदा मॉडल के लिए कोई परिभाषित सहयोग नहीं है, तो यह काम नहीं करेगा। न तो ब्लॉक के साथ scope_to का उपयोग करेगा। – wkhatch

8

मैं पता नहीं क्यों, लेकिन

controller do 
    def index 
     index! do |format| 
     @user_tasks = UserTask.where(:user_id => current_user.id).page(params[:page]) 
     format.html 
     end 
    end 
end 

चाल किया था।

+0

यह मेरे लिए काम किया भी http://stackoverflow.com/questions/13116244 –

+0

आप इस के लिए कैसे पहुँचा? –

2

आज्ञा देना इस तरह कार्रवाई ओवरराइड:

controller do 
    def scoped_collection 
    # some stuffs 
    super.where("type = ?", "good") 
    end 

    # other stuffs 
end 

इस वैसे, आप निर्यात कार्यों (xml, csv, ...) को सामान्य रूप से नए संग्रह के साथ भी चला सकते हैं जिसे आपने ओवरराइड किया है।

मेरे परीक्षण में, यह केवल उस स्थिति और दायरे के लिए काम करता है, सीमा के लिए नहीं।

इस से देखें: https://github.com/activeadmin/activeadmin/issues/642

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