2012-06-13 20 views
6

will_paginate bağlantılarını /list?page=1 biçimini /list/page/1 biçiminde değiştirmeye çalışıyorum. Bunun için doğru yolu ayarlarım var, ancak will_paginate, güzel URL stilinden ziyade bağlantılarda sorgu dizesini kullanıyor. Aksi halde nasıl söylenir? Ben will_paginate 2.3.16 ve Raylar 2.3.14 kullanıyorumURL'ler nasıl değiştirilir?

.

cevap

9

will_paginate, url_for yardımcı programını kullanır. Kullandığı parametreleri içeren rotaları tanımlarsanız, güzel URL'ler üretmelidir.

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

emin olun, siz yukarıda da denetleyici eylemini maç olabilir herhangi yolları bu rotayı tanımlar. Daha da iyisi:

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

Teşekkür: Böyle endeks eylemi dahil değildir. Sadece yollarım berbattı! Cevabınız için teşekkürler ve işte şimdi bir " – babonk

+3

" map.connect '' match '/ list/page /: page' => 'lists # index' '. Anw, 'map.connnect' @iblue üzerinde bir yazım hatası var, sadece bu yazı benim için yararlı olduğu için söylüyorum: D Eğer yanılıyorsam beni düzeltin, raylar – ksugiarto

+0

Haklısınız. Yazım hatası düzeltildi. – iblue

1

Burada birkaç seçenek vardır:

1 seçeneği: maymun yama WillPaginate::ActionView::LinkRenderer#url, şu anda aşağıdaki url mantığı vardır:

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 

Yani, bunun yerine "/list/page/#{page}" gibi bir şey yapabilirsiniz düşünün.

Diğer yol, işleyiciyi tam olarak uygulamak (WillPaginate::ViewHelpers::LinkRenderer'u alt sınıflara ayırmak) ve ardından will_paginate öğesini çağırırken :renderer => MyRendererClass olarak sağlamaktır.