2011-12-18 6 views
14

tôi đã cố gắngMongoid pagination

@posts = Post.page(params[:page]).per_page(10) 

@posts = Post.paginate(:page => 1, :per_page => 10)  

nhưng không phải phương pháp làm việc

undefined method `page' for Post:Class 

undefined method `paginate' for Post:Class 

Làm thế nào để bạn làm pagination với mongoid?

+0

Chỉ cần sử dụng một số thư viện để phân trang với MongoDB. Bạn có thể sử dụng: gem 'will_paginate' và gem "will_paginate_mongoid" – ThienSuBS

Trả lời

10

Bạn nên sử dụng Kaminari https://github.com/amatsuda/kaminari

+1

Tôi nhận được những lỗi tương tự khi sử dụng mongoid. Không có phương pháp trang. – Dogweather

+0

bạn đã khởi động lại máy chủ sau khi rails g kaminari: config? –

+2

Kaminari hoạt động hoàn hảo cho tôi với Rails 4.0.0, Mongoid 4.0.0. –

4

này hoạt động tốt đối với tôi:

@posts = Post.paginate(:page => 1, :limit => 10).desc(:_id) 

desc(:_id) được thêm vào để mà tất cả bài viết có thể được liệt kê đầu tiên.

+1

Điều này làm việc cho tôi sau khi tôi thêm 'gem 'mongoid-pagination'' vào' Gemfile' của tôi. – Leopd

1

điều ngớ ngẩn, nhưng nó làm việc cho tôi trong Sinatra sau khi tôi thêm require 'mongoid-pagination' để app.rb

+0

~ 1 năm nữa, tôi thích kaminari –

2

Một hơi muộn, nhưng đối với bất cứ ai khác nhìn, tôi thấy 'will_paginate_mongoid'

https://github.com/lucasas/will_paginate_mongoid

Thật thẳng về phía trước và cho phép bạn chỉ cần làm

collection.skip(20).limit(10) 
+0

Cách đúng là [kaminari] (https://github.com/amatsuda/kaminari). – yanychar

+0

Nếu vì lý do nào đó bạn cần sử dụng 'will_paginate' và bạn chạy' rails-4', 'will_paginate_mongoid' không hoạt động lần cuối tôi đã kiểm tra. Giải pháp là đặt [mongoid_paginator.rb] (https://raw.github.com/lucasas/will_paginate_mongoid/master/lib/will_paginate_mongoid/mongoid_paginator.rb) trong 'app/models/concern', xóa phần tử bên ngoài' mô-đun WillPaginateMongoid' và sau đó 'bao gồm MongoidPaginator' trong lớp mô hình của bạn. – yanychar

3

Vẫn sử dụng will_paginate cũng được.

Bài nầy có cùng một vấn đề: undefined method `paginate' for Array on Rails 3 with mongoid

Điểm chính để sửa chữa các lỗi là thêm dòng này trước khi thư viện điều khiển cuộc gọi paginate:

require 'will_paginate/array' 

Nó nên được bổ sung để mặc định tập tin cấu hình nếu bạn sử dụng mongoid cho toàn bộ dự án.

Hy vọng lời giải thích sẽ hữu ích.

Tham chiếu từ nguồn gốc đá quý nguồn gốc: https://github.com/mislav/will_paginate/wiki/Backwards-incompatibility tại phần "WillPaginate :: Collection".

P/S: đây chỉ là một công việc xung quanh nếu truy vấn của bạn không phải là rất lớn. Nếu bạn muốn có hiệu suất tốt hơn, hãy thử mongoid-pagination gem, custom will_pagination gem hoặc một đá quý phân trang khác hỗ trợ Mongoid như kaminari.

+0

Tại sao chúng ta nên thêm "/ mảng" !!! – RubyOnRails

+0

Tôi nghĩ phiên bản origin của will_paginate không hỗ trợ cơ sở dữ liệu không có sql như Mongoid nên gọi lõi cơ sở của gem này sẽ giải quyết vấn đề này bằng cách xem xét cơ sở dữ liệu như các mảng bình thường, không phải định dạng cơ sở dữ liệu sql đặc biệt như MySQL, SQLite, .. . –

0

gửi bài vài năm sau đó, trong trường hợp người khác phải đối mặt với những thách thức tương tự.

kaminari-mongoid đã được phát hành vào năm 2016 và hiện được duy trì.

https://github.com/kaminari/kaminari-mongoid

Tất cả sự tốt lành của Kaminiari cho Mongoid, bao gồm xử lý thích hợp của Mongoid::Criteria kết quả, đó là có thể là nguyên nhân gây ra lỗi của OP.