2012-02-16 10 views
12

मैं पृष्ठ पर अंक लगाना करने के लिए:कैसे Rabl के संग्रह इस टेम्पलेट

# app/views/posts/index.rabl 
collection @posts => :posts 
attributes :id, :title, :subject 
child(:user) { attributes :full_name } 
node(:read) { |post| post.read_by?(@user) } 

चुड़ैल रिटर्न:

{ 
    "posts": [ 
     { 
      "post": { 
       "id": 5, 
       "title": "...", 
       "subject": "...", 
       "user": { 
        "full_name": "..." 
       }, 
       "read": true 
      } 
     } 
    ] 
} 

और मैं इस प्रतिपादन करने के क्रम में कुछ पृष्ठांकन पैरामीटर जोड़ने के लिए जोड़ना चाहते हैं:

{ 
    "posts": [ 
     { 
      "post": { 
       "id": 5, 
       "title": "...", 
       "subject": "...", 
       "user": { 
        "full_name": "..." 
       }, 
       "read": true 
      } 
     } 
    ], 
    "total": 42, 
    "total_pages": 12 
} 

कोई विचार? बहुत धन्यवाद!

+0

यह शीर्षक में पृष्ठांकन जानकारी जोड़ने के लिए [ 'लिंक'] उदाहरण – shingara

+0

मैं पूरी तरह सहमत द्वारा Github द्वारा करना पसंद बेहतर है। हालांकि अभी मुझे कुछ मौजूदा एपीआई के साथ संगत रहना होगा। –

उत्तर

16

मेरे नोब प्रश्न के लिए खेद है, रीडमे द्वारा चुड़ैल का जवाब दिया गया था।

object false 

node(:total) {|m| @posts.total_count } 
node(:total_pages) {|m| @posts.num_pages } 

child(@posts) do 
    extends "api/v1/posts/show" 
end 

नोट:: यहाँ पृष्ठांकन का एक उदाहरण है मैं पृष्ठांकन के लिए Kaminari उपयोग कर रहा हूँ।

+0

ऑब्जेक्ट (झूठी) 'को कॉल करना जब ऑब्जेक्ट एक सरणी है, तो मेरे लिए काम नहीं लग रहा है। क्या कोई मौका है कि आप यह समझ सकते हैं कि आपका index.rabl कैसा दिखता है? –

1

ध्यान दें, will_paginate के लिए 3.0.0 निम्नलिखित काम करता है:

node(:total) {|m| @posts.total_entries } 
node(:total_pages) {|m| (@posts.total_entries.to_f/@posts.per_page).ceil } 
node(:page_num){|m| @posts.current_page} 
+0

कुल पृष्ठ गणना पूर्ण होनी चाहिए: 'stuff.total_entries.to_f/stuff.per_page) .ceil', अंतिम पृष्ठ के लिए पूर्ण नहीं होने के कारण। – arnab

+0

@arnab धन्यवाद, उत्तर – davidcollom

3

जब kaminari और rabl के लिए खोज यह पहली और काफी केवल प्रासंगिक परिणाम है। इस प्रकार, मैं HAL Specification के अनुसार एक समाधान छोड़ना चाहता हूं जो this जैसे लिंक उत्पन्न करता है।

तो सबसे पहले, दृश्य के साथ शुरू करते हैं:

# api/v1/posts/index.rabl 
object false 

child(@posts) do 
    extends 'api/v1/posts/show' 
end 

node(:_links) do 
    paginate @posts 
end 

फिर पृष्ठ पर अंक लगाना विधि को परिभाषित करने के लिए आगे बढ़ें:

# app/helpers/api_helper 
module ApiHelper 
    def paginate(collection) 
    current_page_num = collection.current_page 
    last_page_num = collection.total_pages 

    { 
     :first => first_page, 
     :previous => previous_page(current_page_num), 
     :self => current_page(current_page_num), 
     :next => next_page(current_page_num, last_page_num), 
     :last => last_page(last_page_num) 
    } 
    end 

    def first_page 
    { :href => url_for(:page => 1) } 
    end 

    def previous_page(current_page_num) 
    return nil if current_page_num <= 1 
    { :href => url_for(:page => current_page_num-1) } 
    end 

    def current_page(current_page_num) 
    { :href => url_for(:page => current_page_num) } 
    end 

    def next_page(current_page_num, last_page_num) 
    return nil if current_page_num >= last_page_num 
    { :href => url_for(:page => current_page_num+1) } 
    end 

    def last_page(last_page_num) 
    { :href => url_for(:page => last_page_num) } 
    end 
end 

और अंत में, आवश्यक नियंत्रकों में सहायक शामिल हैं। सहायक एक Api::BaseController, जिसमें से सभी एपीआई नियंत्रकों के वारिस में शामिल किया जा सकता है:

helper :api 

मैं ज़ाग मेढ़ी .. के समाधान के बिना यह नहीं कर सका, इसलिए .. बहुत बहुत शुक्रिया!

+1

को प्रतिबिंबित करने के लिए अद्यतन किया गया है जो सामान्य विचारों में अंकन को तोड़ता है क्योंकि डिफ़ॉल्ट रेलों में सभी सहायक –

+0

शामिल हैं, फिर रेल को कॉन्फ़िगर करें ताकि इसमें सभी सहायक शामिल न हों या केवल 'पेजिनेट' विधि का नाम बदलें। – Ashitaka

+0

हाँ, यह सिर्फ ध्यान दिया जाना चाहिए, क्योंकि रेल डिफ़ॉल्ट व्यवहार समाधान के साथ संघर्ष कर रहा है –

0

यह हो सकता है आप के लिए क्या देख रहे;)

object false 
node :comments do 
    partial('posts/index', object: @posts) 
end 

node(:pagination) do 
    { 
    total:@posts.count, 
    total_pages: 20 
    } 
end 
संबंधित मुद्दे