2013-03-31 15 views
9

さて、私の問題は単純な解決策だと確信しています。ここに私のcontroller.rbコードです:何らかの理由Ruby on Railsページネーション:ソート順が尊重されない(will_paginate gem)

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

、私のソート順が尊重されていません。改ページは正しく機能していますが(ページあたりの数など)、注文はまったく機能していません。私はASCDESCのような異なる値と、別のフィールドを無駄にしようとしました。ここで最初の「注文」移動した後、私の全体のコントローラ機能である:

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 

私は以前、このレール1に完璧に働いていたが、私はちょうどwill_paginate宝石でこれを把握することはできません。私が言及したように、:per_pageパラメータが働いているので、ページネーションが機能していることを知っています。並べ替えとエラーがなくなりました。私はどんな助けもありがとう!

+0

どのページング宝石を使用していますか? –

+0

私はwill_paginateを使用しています –

+0

生成されたSQLの外観はどうですか? – fphilipe

答えて

1

私はいくつかの他のユーザーの質問に答えた後、問題を解決することができました。

default_scope :order => 'date' 

このdefault_scopeを除去した後、順序はそれが必要として正常に機能し始めた:私の「写真」のモデルを確認した後、@mislavの要請で、私はそれが含まれていることに気づきました。問題が解決しました。

+0

これは唯一の回避策です。 'default_scope'節を削除することがオプションでない場合、真の解決策については私の答えを見てください。 – mislav

2

は、使用してみてください:

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

いいえ、それは動作していないようでした。作成された日付でソートされているようです(「日付」は並べ替えたいフィールドです)。 –

+0

ええと、私が書いたことは、ドキュメントからまっすぐです。あなたは写真のためのあなたのクラスdefのいくつかを投稿できますか? –

+0

私は実際にwill_paginate関数のために、私のドキュメントを実際に引き出しました。上記のオリジナル投稿をより完全なコードセクションで更新しました。もっと必要な場合は教えてください。 –

13

メソッドでオーバーライドできないデフォルトの注文(default_scopeを使用)があり、注文ルールを追加するだけです。ただし、順序をリセットすることができます。

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

ところで、あなたは、コントローラのアクションから@photos = Photo.allを削除することをお勧めします。ページ単位の写真セットを取得している場合は、最初にすべてをデータベースから取得するのは意味がありません。

+1

ありがとうございます!あなたはこれをどのように知っていましたか?これは、レールのドキュメントにはありません。 –

+0

Railsのソースコードを読んで、どの機能があるかを知る。 – mislav

関連する問題