Domanda

I seguenti set di risultati funziona bene con will_paginate:

Members.all(:limit => 5).paginate(:page => params[:page])
Members.all(:conditions => ["member_no < 6"]).paginate(:page => params[:page])
Members.all.paginate(:page => params[:page])

Quanto segue non:

Members.all(:conditions => ["member_no IN (?)", [1, 2, 3, 4, 5]]).paginate(:page => params[:page])

Perché la seconda query non funziona bene con paginate? Grazie!

È stato utile?

Soluzione

Il #paginate è un metodo di istanza reso disponibile su Array e ActiveRecord :: Base. È davvero dovrebbe fare in questo modo:

Member.paginate(:page => params[:page], :limit => 5)
Member.paginate(:conditions => ["member_no < ?", 6], :page => params[:page])
Member.paginate(:page => params[:page])
Member.paginate(:conditions => {:member_no => (1..5)}, :page => params[:page])

Quando si chiama #all allora #paginate, quello che stai facendo sta chiedendo per tutti membri (tutti 1.000.000 di loro), poi scartando 99,999% di loro, perché si vuole solo il primo 10 . Questo è molto dispendioso, per non dire altro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top