2013-03-31 28 views
9

Tamam, eminim ki sorunumun basit bir çözümü var. İşte benim controller.rb kodu: NedenseRuby on Rails Pagination: Sıralama sırası saygı duyulmuyor (will_paginate gem)

@photos = Photo.paginate :page=>params[:page], :order => "date DESC", :per_page => 2 

, benim sıralama düzeni uyulmuyor değildir. Sayfalandırma doğru şekilde çalışıyor (sayfa başına sayı gibi) ancak sipariş hiç çalışmıyor. ASC ve DESC gibi farklı değerler kullanmanın yanı sıra boş alanlardan farklı alanları kullanmayı denedim. İşte ilk "düzen" taşıdıktan sonra benim tüm kontrolör fonksiyonudur:

def index 
    @photos = Photo.all 
    @photos = Photo.order("date DESC").paginate(:per_page => 12, :page => params[:page]) 
    respond_to do |format| 
    format.html # index.html.erb 
    format.json { render :json => @gallery } 
    end 
end 

Ben daha önce bu Raylar 1'de mükemmel çalışıyor vardı, ben sadece will_paginate mücevher ile bu anlamaya olamaz. Daha önce de belirttiğim gibi, :per_page parametresi çalışmaktadır, bu yüzden sayfalama çalışmasını biliyorum, sadece sıralama yapmam ve hata olmam. Herhangi bir yardım için minnettarım! kullanılarak

+0

Hangi pagination gem kullanıyorsunuz? –

+0

Kullanıyorum will_paginate –

+0

Oluşturulan SQL neye benziyor? – fphilipe

cevap

1

bazı diğer kullanıcının sorularını yanıtlayan sonra sorunu çözmek başardı.

default_scope :order => 'date' 

bu default_scope çıkardıktan sonra, sipariş olması gerektiği gibi düzgün başladı: benim "Fotoğraf" modelini inceledikten sonra, @mislav isteği üzerine bunu içerdiğini fark etti. Sorun çözüldü.

+0

Bu sadece bir çözümdür. 'Default_scope' deyiminin kaldırılması durumunda bir seçenek için gerçek bir çözüm için yanıtımı görün. – mislav

2

Dene:

Photo.per_page = 2 
Photo.page(params[:page]).order("date DESC") 
+0

Hayır, işe yaramadı. Sadece yaratılan tarihe göre sıralama yapıyor gibi görünüyor ("tarih" ise sıralamak istediğim bir alandır). –

+0

Hmm, yazdığım şey doğrudan dokümanlardan çıktı. Fotoğraf için sınıf def'inizden biraz daha yayınlayabilir misiniz? –

+0

Ben aslında benim fiilleri de will_paginate işlevi için dokümanlar kapalı çekti.Orijinal gönderiimi daha eksiksiz bir kod bölümü ile güncelledim, daha fazlasına ihtiyacınız varsa bildirin. –

13

order() yöntemiyle geçersiz kılmadığınız bir varsayılan siparişiniz var (default_scope aracılığıyla), yalnızca daha fazla sipariş verme kuralları ekleyin. Bununla birlikte, sipariş sıfırlayabilirsiniz:

@photos = Photo.reorder("date DESC").page(params[:page]).per_page(12) 

BTW, denetleyici eylemden @photos = Photo.all kaldırmak istersiniz. Sayfalara ayrılmış bir fotoğraf getiriyorsanız, bunların tümünü önce veritabanından almak mantıklı değildir.

+1

Teşekkürler! Bunu kullanmayı nereden biliyordun? Rayların belgelerinde değil. –

+0

Hangi özelliklerin mevcut olduğunu öğrenmek için Rails'in kaynak kodunu okurum. – mislav