मुझे आश्चर्य है कि अगर कोई मुझे बता सकता है कि क्या होगा_पैगनेट जेएसओएन को बॉक्स से बाहर कर सकता है या अगर इसे हैक किया जाना है?JSON समर्थन करेगा?
मैं JSON प्रतिक्रियाओं में पृष्ठ डेटा जोड़ना चाहता हूं, जबकि will_paginate पेजिनेशन प्रबंधित करता है।
मुझे आश्चर्य है कि अगर कोई मुझे बता सकता है कि क्या होगा_पैगनेट जेएसओएन को बॉक्स से बाहर कर सकता है या अगर इसे हैक किया जाना है?JSON समर्थन करेगा?
मैं JSON प्रतिक्रियाओं में पृष्ठ डेटा जोड़ना चाहता हूं, जबकि will_paginate पेजिनेशन प्रबंधित करता है।
की लाइनों में कुछ:
will_paginate सिर्फ रिकॉर्ड को कटा हुआ तरीके से वापस ले जाता है। तो यह सिर्फ आपके डेटाबेस से एक सरणी हो जाता है।
जब आप जेसन के रूप में प्रस्तुत करते हैं, तो यह पंक्तियां ऑब्जेक्ट्स की सरणी पर जा रही हैं और उन पर as_json को कॉल कर रही हैं।
तो हाँ, आप json के रूप में प्रतिपादन कर सकते हैं। Pagination with AJAX
लेकिन मुझे लगता है कि मुझे इसे हैक करना होगा ताकि इसमें पेजिन डेटा के साथ JSON प्रतिक्रिया में पृष्ठों की कुल संख्या शामिल हो। –
जो मॉडल.paginate से प्रतिक्रिया में है - तो आपको बस जेसन प्रतिक्रिया में इसकी तलाश करनी होगी। –
मैं भी इसमें देख लूंगा। @ मिस्लाव ने जो कुछ भी खोजा था, उसका उदाहरण और उदाहरण दिया, हालांकि, मैं देख सकता हूं कि मानक आउटपुट को केवल जेएसओएन के रूप में प्रस्तुत करने के लिए मुझे आवश्यक जानकारी भी होनी चाहिए। –
मैं आप इस 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
विधि परिभाषित कर सकते हैं :: संग्रह।
मैं आरजेएस का उपयोग नहीं कर रहा हूं इसलिए डेटा जेएसओएन प्रतिक्रिया –
एक 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
यह एक एपीआई के लिए महान अंकन है। लौटाए गए डेटा को संशोधित न करें, शीर्षलेख में अंकन जानकारी रखें। सुपर क्लीन सॉल्यूशन, एंगुलर जैसे अन्य लोगों के साथ अच्छा खेलता है जो इंडेक्स/सूची/क्वेरी के लिए परिणामों की एक सरणी चाहता है। – Ryan
सबसे आसान समाधान
def index
@posts = Post.all.paginate(:page => params[:page], :per_page => 4)
render :json => @posts.to_json(:methods => [:image_url])
end
की तरह लग रहे
तुम सिर्फ जोड़ने के लिए gem, will_pagination
यह मेरे
लिए काम करता है यह एक मेरी मदद की जरूरत है:
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)
हां में होना चाहिए, वही है जो मैं करना चाहता हूं, अब मुझे पता है कि यह कैसे काम करता है यह संभवतः जेएसओएन को प्रस्तुत करके मुझे जो चाहिए वह लौटाता है, हालांकि, इस तरह के प्रारूप को बदलने के लिए उपयोगी है। –
अपनी प्रतिक्रिया में एन्कोडिंग पेजिनेशन के एक बेहतर तरीके के लिए गिटहब एपीआई दस्तावेज़ [1] देखें (संकेत: इसे शीर्षकों में रखें) [1]: http://developer.github.com/v3/#pagination – asymmetric
कैसे क्या आपको ये विधियां मिलीं? वे will_paginate विकी में सूचीबद्ध नहीं हैं। – Francisco