최근에 내 쿼리를 4 개의 명명 된 범위로 분리하여 다시 정렬하기 쉬워졌으며 페이지별로 계산하지 못하는 페이지 매김이 문제없이 페이지 수를 계산합니다. 그래서 결국에 던져 PAGINATE와 같이 사용는 명명 된 범위와 함께 잘못된 매김을 매김합니다.
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'
...
@location = Place.loc(params[:id]).datem(user_cart.getDate,user_cart.getDays).order_by_external_desc.paginate(:per_page => 15, :page => params[:page])
페이지를 매기는 의지 예를 들어 15 각 6 페이지가 보여하지만 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
는하지만 SQL은 전 생성하기
[email protected] = Place.loc(params[:id]).datem(user_cart.getDate,user_cart.getDays).order_by_external_desc
c.size = 56
후자보다 약 8 라인 짧은이다 그리고 더 많은 결과를 반환하게 내 HAVING 조항을 무시 ...
이 문제를 해결하는 방법에 대한 아이디어?
샷 :'.peginate' 앞에'.all'을 추가하는 것이 도움이됩니까? – tsherif
아직 답변이 없습니까? – Joerg