2013-02-25 3 views
1

저는 리뷰 (기본적으로 ID 일련 번호와 일부 텍스트 열)라는 매우 기본적인 모델을 가지고 있으며 간단한 매김 시스템을 만들고 있습니다. 다음 코드 :페이지 매기기 DataMapper

Review.all(:limit => per_page, :offset => offset, :order => [ :id.asc ]) 

오프셋이 0 인 경우 올바른 개체를 반환하지만 다른 어떤 오프셋 경우 문제가있다. 오프셋 (offset)> 0, 코드와 :

reviews = Review.all(:offset => offset, :limit => per_page); 
p reviews 
p reviews.count 

반환

[#<Review @id=11 @created_at=<not loaded> @rating=<not loaded> @title=<not loaded> @text= <not loaded> @name=<not loaded> @from=<not loaded> @stay_date=<not loaded> @helpful=0 @not_helpful=0 @response=<not loaded>>, #<Review @id=12 @created_at=<not loaded> @rating=<not loaded> @title=<not loaded> @text=<not loaded> @name=<not loaded> @from=<not loaded> @stay_date=<not loaded> @helpful=0 @not_helpful=0 @response=<not loaded>>, #<Review @id=13 @created_at=<not loaded> @rating=<not loaded> @title=<not loaded> @text=<not loaded> @name=<not loaded> @from=<not loaded> @stay_date=<not loaded> @helpful=0 @not_helpful=0 @response=<not loaded>>, #<Review @id=14 @created_at=<not loaded> @rating=<not loaded> @title=<not loaded> @text=<not loaded> @name=<not loaded> @from=<not loaded> @stay_date=<not loaded> @helpful=0 @not_helpful=0 @response=<not loaded>>, #<Review @id=15 @created_at=<not loaded> @rating=<not loaded> @title=<not loaded> @text=<not loaded> @name=<not loaded> @from=<not loaded> @stay_date=<not loaded> @helpful=0 @not_helpful=0 @response=<not loaded>>] 
0 

이 어떻게

? 그 물체를 찾았지 만 그것들을 셀 수는 없습니까?

답변

1

지연 목록을 #to_a#count 인 배열 (예 : Review.all(:limit => 10, :offset => 10).to_a.count)로 변환 할 수 있습니다.

덧붙여서, Array : Review[offset,limit]의 정신으로 제한과 오프셋을위한 다소 훌륭한 구문 설탕이 있습니다.

전체 예제 :

require 'rubygems' 
require 'dm-core' 
require 'dm-migrations' 
require 'dm-sweatshop' # just to load some fixtures 

DataMapper::Logger.new($stdout, :debug) 
DataMapper.setup(:default, "sqlite::memory:") 

class Review 
    include DataMapper::Resource 
    property :id,   Serial 
    property :title,  String, :required => true 
    property :rating,  Integer, :min => 1, :max => 10 
    property :created_at, DateTime, :default => lambda {Time.now} 
end 

DataMapper.finalize.auto_migrate! 

class FixtureHelpers # Just to cache for sweatshop, avoid polluting top-level 
    @@date_range = (Date.new(2003)..Date.today).to_a 
    def self.rand_date; @@date_range.choice end 
end 

Review.fix {{ 
    :title => /\w+/.gen.capitalize, 
    :rating => (1..10).to_a.choice, 
    :created_at => FixtureHelpers.rand_date 
}} 

100.of {Review.gen} 

p Review[95,10].to_a.count 
# ~ (0.000105) SELECT "id", "title", "rating", "created_at" FROM "reviews" ORDER BY "id" LIMIT 10 OFFSET 95 
# => 5