2011-01-15 14 views
16

मुझे आश्चर्य है कि अगर कोई मुझे बता सकता है कि क्या होगा_पैगनेट जेएसओएन को बॉक्स से बाहर कर सकता है या अगर इसे हैक किया जाना है?JSON समर्थन करेगा?

मैं JSON प्रतिक्रियाओं में पृष्ठ डेटा जोड़ना चाहता हूं, जबकि will_paginate पेजिनेशन प्रबंधित करता है।

उत्तर

38

की लाइनों में कुछ:

+0

हां में होना चाहिए, वही है जो मैं करना चाहता हूं, अब मुझे पता है कि यह कैसे काम करता है यह संभवतः जेएसओएन को प्रस्तुत करके मुझे जो चाहिए वह लौटाता है, हालांकि, इस तरह के प्रारूप को बदलने के लिए उपयोगी है। –

+3

अपनी प्रतिक्रिया में एन्कोडिंग पेजिनेशन के एक बेहतर तरीके के लिए गिटहब एपीआई दस्तावेज़ [1] देखें (संकेत: इसे शीर्षकों में रखें) [1]: http://developer.github.com/v3/#pagination – asymmetric

+2

कैसे क्या आपको ये विधियां मिलीं? वे will_paginate विकी में सूचीबद्ध नहीं हैं। – Francisco

1

will_paginate सिर्फ रिकॉर्ड को कटा हुआ तरीके से वापस ले जाता है। तो यह सिर्फ आपके डेटाबेस से एक सरणी हो जाता है।

जब आप जेसन के रूप में प्रस्तुत करते हैं, तो यह पंक्तियां ऑब्जेक्ट्स की सरणी पर जा रही हैं और उन पर as_json को कॉल कर रही हैं।

तो हाँ, आप json के रूप में प्रतिपादन कर सकते हैं। Pagination with AJAX

+0

लेकिन मुझे लगता है कि मुझे इसे हैक करना होगा ताकि इसमें पेजिन डेटा के साथ JSON प्रतिक्रिया में पृष्ठों की कुल संख्या शामिल हो। –

+1

जो मॉडल.paginate से प्रतिक्रिया में है - तो आपको बस जेसन प्रतिक्रिया में इसकी तलाश करनी होगी। –

+0

मैं भी इसमें देख लूंगा। @ मिस्लाव ने जो कुछ भी खोजा था, उसका उदाहरण और उदाहरण दिया, हालांकि, मैं देख सकता हूं कि मानक आउटपुट को केवल जेएसओएन के रूप में प्रस्तुत करने के लिए मुझे आवश्यक जानकारी भी होनी चाहिए। –

1

मैं आप इस Railscast देखने की सलाह देता

@posts = Post.paginate :page => params[:page] 

respond_to do |format| 
    format.json { 
    render :json => { 
     :current_page => @posts.current_page, 
     :per_page => @posts.per_page, 
     :total_entries => @posts.total_entries, 
     :entries => @posts 
    } 
    } 
end 

एक बार जब आप यह पता लगाने की क्या प्रारूप आप चाहते हैं, तो आप हमेशा एक WillPaginate पर एक to_json विधि परिभाषित कर सकते हैं :: संग्रह।

+1

मैं आरजेएस का उपयोग नहीं कर रहा हूं इसलिए डेटा जेएसओएन प्रतिक्रिया –

8

एक API

के पृष्ठांकन जोड़ा जा रहा है मैं will_pagination साथ एपीआई JSON उत्तर पृष्ठांकन के लिए एक आसान समाधान नहीं मिला।

ApplicationController में एक वर्ग विधि है कि एक after_filter कि प्रतिक्रिया हेडर में पृष्ठांकन मेटा डेटा सेट हो जाएगा पैदा करेगा बनाने के द्वारा

शुरू: में

application_controller.rb

class ApplicationController < ActionController::Base 

    protected 
    def self.set_pagination_headers(name, options = {}) 
    after_filter(options) do |controller| 
     results = instance_variable_get("@#{name}") 
     headers["X-Pagination"] = { 
     total: results.total_entries, 
     total_pages: results.total_pages, 
     first_page: results.current_page == 1, 
     last_page: results.next_page.blank?, 
     previous_page: results.previous_page, 
     next_page: results.next_page, 
     out_of_bounds: results.out_of_bounds?, 
     offset: results.offset 
     }.to_json 
    end 
    end 

end 

फिर नियंत्रक हम पेजिनेशन हेडर जोड़ना चाहते हैं, हम इसे इस तरह कहते हैं:

widgets_controller.rb

class Api::V1::WidgetsController < Api::V1::BaseController 
    set_pagination_headers :widgets, only: [:index] 

    def index 
    @widgets = Widget.all.paginate(params).order("created_at desc") 
    respond_with @widgets 
    end 

end 

प्रतिक्रिया हेडर कि इस

> Cache-Control:max-age=0, private, must-revalidate 
> Connection:keep-alive Content-Type:application/json; charset=utf-8 
> Etag:"fe70f7bae4c6e5cdea7867aa7fc0c7b4" 
> X-Pagination:{"total":14,"total_pages":1,"first_page":true,"last_page":true,"previous_page":null,"next_page":null,"out_of_bounds":false,"offset":0} 
> Server:thin 1.3.1 codename Triple Espresso 
> Set-Cookie:_widgets_session=BAh7CEkiD3Nlc3Npb25faWQGOgZFRkkiJTAzYjVlNzkwZTIyNzU4YTYwMDU0M2MwOTQ2ZWI3YWU2BjsAVEkiDWxhc3RfdXJsBjsARkkiM2h0dHA6Ly9tYWluYW5kbWUtc3RhZ2luZy5oZXJva3VhcHAuY29tL3VzZXJzLzEGOwBGSSIQX2NzcmZfdG9rZW4GOwBGSSIxdjd0SEp6cVhKamh5YTh1cnBUdmpBb0w5aVA0bS9QTEdON3g1UlFUYnBkND0GOwBG--71b3a24c216a414d8db04f312b5300c818e6bba4; 
> path=/; HttpOnly Transfer-Encoding:Identity 
> X-Request-Id:61b383ade49cba8b24a715a453ed6e1f X-Runtime:0.191485 
> X-Ua-Compatible:IE=Edge,chrome=1 

Source -Adding Pagination to an API

+0

यह एक एपीआई के लिए महान अंकन है। लौटाए गए डेटा को संशोधित न करें, शीर्षलेख में अंकन जानकारी रखें। सुपर क्लीन सॉल्यूशन, एंगुलर जैसे अन्य लोगों के साथ अच्छा खेलता है जो इंडेक्स/सूची/क्वेरी के लिए परिणामों की एक सरणी चाहता है। – Ryan

2

सबसे आसान समाधान

def index 
    @posts = Post.all.paginate(:page => params[:page], :per_page => 4) 
    render :json => @posts.to_json(:methods => [:image_url]) 
    end 
की तरह लग रहे

तुम सिर्फ जोड़ने के लिए gem, will_pagination

यह मेरे

0

लिए काम करता है यह एक मेरी मदद की जरूरत है:

https://github.com/rails-api/active_model_serializers/blob/master/docs/howto/add_pagination_links.md

अनुकूलित

अपने आधार एपीआई नियंत्रक के लिए इस विधि जोड़ें।

def pagination_dict(collection) 
    { 
    current_page: collection.current_page, 
    next_page: collection.next_page, 
    prev_page: collection.prev_page, # use collection.previous_page when using will_paginate 
    total_pages: collection.total_pages, 
    total_count: collection.total_count # use collection.total_entries when using will_paginate 
    } 
end 

फिर, इसे अपने प्रस्तुत विधि पर उपयोग करें।

render json: posts, meta: pagination_dict(posts) 
संबंधित मुद्दे