Cuộn vô hạn với Kaminari trong đường ray

Tram Ho

Ngày nay thì mạng xã hội không còn lạ với việc chúng ta cứ lăn chuột và các bài post dần hiện ra, cứ tầm chục bài thì lại load tiếp.
Đó chính là kĩ thuật phân trang, ngoài ra còn kết hợp với cả ajax. Bài viết này mình sẽ hướng dẫn các bạn demo một app về infinite scroll sử dụng gem kaminari nhé.

1. Khởi tạo project

Chúng ta sẽ khởi tạo một demo nhỏ với câu lệnh đơn giản trong rails.

Thêm vào một số gemfile cần thiết.

Mình sẽ giới thiệu sơ qua.
gem kaminari dùng để phân trang, gem faker để fake giữ liệu các bài post, gem bootstrap-sass và bootstrap-kaminari-views chứa các style cho các pagination, next page, …
Tiếp theo là gì chắc ai cũng biết rồi nhỉ.
Dĩ nhiên là bundle install rồi.
Tiếp theo, thêm /=require bootstrap vaò file application.js và @import "bootstrap"; vào application.scss.

2. Model

Chúng ta tạo một model với các trường đơn giản:

  • id (integer, primary key)
  • title (string)
  • body (text)
  • created_at (datetime)
  • updated_at (datetime)

Với câu lệnh:

Tiếp theo trong file config/seeds.rb chúng ta fake giữ liệu:

Lệnh này sinh ra 50 bài post.
Tiếp theo chạy rails db:seed để general ra dữ liệu.
Cuối cùng trong config/routes.rb chúng ta thêm :

3. Controller

Để sử dụng phân trang, trong controller chúng ta sẽ viết:

là truyền số trang page được phân trang, per 10 là 10 bài post trong 1 trang.

View

index.html.erb

Trong khối div #my-posts chứa những post đã được phân trang. Câu lệnh render @posts sẽ hiển thị mỗi post từ mảng bằng cách dùng partial _post.html.erb

** Infinite scroll**

Bây giờ ta sẽ chuyển phân trang thành infinite scrolling bằng JQuery. Tạo một file tên là pagination.js trong thư mục javascripts

post/index.js.erb

Ta hiển thị các post khác bằng cách append vào block #my-post . Sau đó, kiểm tra xem có còn trang hay không. Nếu có, thay thế thanh phân trang hiện tại với một trang mới. Ngược lại, ta remove thanh phân trang và unbind các sự kiện scroll window.

Kết

Trên đây mình đã giới thiệu và demo cho các bạn về infinite. Hi vọng bài viết sẽ hữu ích cho các bạn. Cảm ơn vì đã đọc bài của mình.

Tham khảo

https://www.sitepoint.com/infinite-scrolling-rails-basics/

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo