4
我最近分手我的查询到4个命名的范围,以便更容易重新排序和分页,否则始终正常工作现在有问题计算页数。将分类错误与指定的范围
named_scope :loc, lambda { |id| { :conditions => ['location_id = ?', id ] } }
named_scope :datem, lambda { |*args| { :joins => :scannables, :conditions => [ "scannables.bookdate BETWEEN ? and ?", (args[0].to_date || 3.days.from_now), (args[0].to_date+(args[1] || 3)) ], :group => 'scannables.hostel_id', :having => 'SUM(scannables.available) > ' + ((args[1] || 3).to_i-1).to_s } }
named_scope :order_by_external_desc, :include => :external_ratings, :order => 'SUM(scannables.available) DESC, external_ratings.rating DESC'
named_scope :order_by_external_asc, :include => :external_ratings, :order => 'SUM(scannables.available) DESC, external_ratings.rating ASC'
使用像这样用PAGINATE扔在年底...
@location = Place.loc(params[:id]).datem(user_cart.getDate,user_cart.getDays).order_by_external_desc.paginate(:per_page => 15, :page => params[:page])
PAGINATE例如将表明,有6页的各15,但是当你到了4页,5页6消失......如果你尝试直接跳到5或6,他们就不存在。
看着它,我实现了问题将分页是具有是
[email protected] = Place.loc(params[:id]).datem(user_cart.getDate,user_cart.getDays).order_by_external_desc.size
c = 78
然而
[email protected] = Place.loc(params[:id]).datem(user_cart.getDate,user_cart.getDays).order_by_external_desc
c.size = 56
对于前者得到生成的SQL是比后者的短约8行并忽略我的SQL HAVING子句,导致它返回更多结果...
有关如何解决此问题的任何想法?
瞎猜:它有助于在'.paginate'之前添加'.all'吗? – tsherif 2012-04-07 15:57:34
你有答案吗? – Joerg 2012-05-02 13:24:43