2012-06-13 13 views
6

मैं /list?page=1 से /list/page/1 के प्रारूप से लिंक बदलने की कोशिश कर रहा हूं। मेरे पास मार्गों के लिए सही सेटअप है, लेकिन will_paginate मेरी सुंदर यूआरएल शैली की बजाय लिंक में क्वेरी स्ट्रिंग का उपयोग कर रहा है। इसे अन्यथा कैसे बताना है?will_paginate URL कैसे बदलें?

मैं उपयोग कर रहा हूँ will_paginate 2.3.16 और रेल 2.3.14

उत्तर

9

will_paginate url_for सहायक का उपयोग करता है। यदि आप मार्गों को परिभाषित करने वाले पैरामीटर को परिभाषित करते हैं, तो इसे सुंदर यूआरएल उत्पन्न करना चाहिए।

map.connect '/lists/page/:page', :controller => 'lists', :action => 'index' 

कृपया सुनिश्चित करें कि आप किसी भी मार्गों कि भी अपने नियंत्रक कार्रवाई से मेल खा सकते ऊपर इस मार्ग परिभाषित करते हैं। इससे भी बेहतर: इंडेक्स एक्शन को इस तरह से बाहर करें:

map.resources :lists, :except => [:index] 
+1

धन्यवाद। मैं बस अपने मार्ग खराब कर दिया था! आपके उत्तर के लिए धन्यवाद और यहां एक बक्षीस – babonk

+3

है 'नक्शा' कनेक्ट करें जिसे 'मिलान'/सूची/पृष्ठ /: पृष्ठ '=>' सूची # अनुक्रमणिका 'कहा जाता है। एन्वा, आपके 'map.connnect' @iblue पर एक टाइपो है, बस यह कह रहा है क्योंकि यह पोस्ट मेरे लिए उपयोगी था: डी अगर मैं गलत हूं, तो कृपया मुझे सही करें, रेलवे नौसिखिया – ksugiarto

+0

आप सही हैं। मैंने टाइपो को सही किया। – iblue

1

आपके पास कई विकल्प यहाँ हैं:

1 विकल्प: बंदर पैच WillPaginate::ActionView::LinkRenderer#url, जो वर्तमान में निम्नलिखित यूआरएल तर्क है:

def url(page) 
    @base_url_params ||= begin 
    url_params = merge_get_params(default_url_params) 
    merge_optional_params(url_params) 
    end 

    url_params = @base_url_params.dup 
    add_current_page_param(url_params, page) 

    @template.url_for(url_params) 
end 

तो, मुझे लगता है आप के बजाय "/list/page/#{page}" की तरह कुछ कर सकते हैं कि।

दूसरा तरीका रेंडरर को पूरी तरह से कार्यान्वित करना है (उपclassing द्वारा), और फिर will_paginate को कॉल करते समय इसे :renderer => MyRendererClass प्रदान करना है।

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