2011-08-03 13 views
22

के लिए अपरिभाषित विधि 'पृष्ठ' मैं इसे पिछले नहीं प्राप्त कर सकता। मुझे पता है मैंने पढ़ा है कि सरणी के लिए कोई पेज विधि नहीं है लेकिन मैं क्या करूँ?# <Array: 0xafd0660>

यदि मैं कंसोल में Class.all चलाता हूं, तो यह # लौटाता है, लेकिन यदि मैं Class.all.page (1) चलाता हूं, तो मुझे उपरोक्त त्रुटि मिलती है।

कोई विचार?

उत्तर

34

कोई ऐरे में कोई पृष्ठ विधि नहीं है।

ऐसा लगता है कि आप कामिनारी का उपयोग कर रहे हैं। Class.all एक सरणी देता है, इस प्रकार आप उस पर पेज नहीं कॉल कर सकते हैं। इसके बजाय, क्लास.पेज (1) का सीधे उपयोग करें।

Kaminari.paginate_array([1, 2, 3]).page(2).per(1) 
+0

जब संदर्भ के लिए Kaminari –

+0

भी Class.page कोशिश कर की कोशिश कर रहा एक गैर-आरंभिकृत लगातार हो रही है (1) कक्षा के लिए मुझे अपरिभाषित विधि 'पृष्ठ' देता है: कक्षा –

+0

क्या आपने वास्तव में इसे अपने जेमफाइल में जोड़कर कामिनरी लोड की है? –

0

मैं एक ही त्रुटि थी:

सामान्य सरणियों के लिए, Kaminari एक महान सहायक विधि है। बंडल अपडेट ने सर्वर को फिर से शुरू किया। दोनों में से एक इसे तय किया।

10

Kaminari अब सरणियों paginating के लिए एक विधि है, तो आप अपने नियंत्रक में कुछ इस तरह कर सकते हैं:

myarray = Class.all 
@results = Kaminari.paginate_array(myarray).page(params[:page]) 
+0

मुझे कामिनारी के लिए एक अनिर्धारित विधि "पेजिनेट_एरे" मिलती है: मॉड्यूल इसे कैसे हल करें? –

+0

@ Þaw लगता है जैसे आप कामिनरी के पुराने संस्करण का उपयोग कर रहे थे। – DaveStephens

3

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

NoMethodError at/
undefined method `page' for # Array 

वहाँ आप दो चीजों के अपने आप को याद दिलाने की जरूरत है, कि संग्रह आप पृष्ठ पर अंक लगाना करने को तैयार हैं एक सरणी या एक ActiveRecordRelation या बिल्कुल कुछ और हो सकता है।

अंतर को देखने के लिए, मान लीजिए कि हमारे मॉडल उत्पाद है और हम products_controller.rb पर हमारे सूचकांक कार्रवाई के अंदर हैं। हम अपने @products साथ निर्माण कर सकते हैं देता है निम्न में से एक का कहना है:

@products = Product.all 

या

@products = Product.where(title: 'title') 

या किसी और ख़ाली ... आदि

या तो तरीकों पर हम पाते हैं आपके @ उत्पाद, हालांकि कक्षा अलग है।

@products = Product.all 
@products.class 
=> Array 

और

@products = Product.where(title: 'title') 
@products.class 
=> Product::ActiveRecordRelation 

इसलिए संग्रह हम Kaminari पृष्ठ पर अंक लगाना करने को तैयार हैं के वर्ग के आधार पर प्रदान करता है:

@products = Product.where(title: 'title').page(page).per(per) 
@products = Kaminari.paginate_array(Product.all).page(page).per(per) 

यह थोड़ा संक्षेप में प्रस्तुत करना , अंकन जोड़ने के लिए एक अच्छा तरीका है अपने मॉडल के लिए:

def index 
    page = params[:page] || 1 
    per = params[:per] || Product::PAGINATION_OPTIONS.first 
    @products = Product.paginate_array(Product.all).page(page).per(per) 

    respond_to do |format| 
    format.html 
    end 

end 

और मॉडल आप पृष्ठ पर अंक लगाना चाहते हैं (product.rb) के अंदर:

paginates_per 5 
# Constants 
PAGINATION_OPTIONS = [5, 10, 15, 20] 
+0

अच्छी तरह से समझाया :) .. धन्यवाद – inquisitive