April 12, 2015
Lapozás Rails-ben Kaminari-val
Ha egy lista túl sok elemet tartalmaz, érdemes lapozással kisebb szeletekre vágni a megjelenített tartalmat. Ennek több előnye is van, például: kicsit kímélhetjük az adatbázist, rövidíthetjük az oldalbetöltés idejét, stb. A kaminari gem lehetővé teszi, hogy ezt roppant egyszerűen megoldjuk.
Adjuk hát hozzá a Rails projektünk Gemfile-jához a kaminarit, majd telepítsük is azt bundler-rel.
gem 'kaminari'
bundle install
Generáljuk a szükséges konfigurációs fájlokat:
rails generate kaminari:config
Állítsuk be az alapértelmezett oldalméretet abban a model-ben, aminek a elemeit listázzuk. Ha például egy blog post-jait szeretnénk oldalanként megjeleníteni, akkor az app/models/post.rb
-ba írjuk bele ezt:
paginates_per 10
Ez elintézi nekünk, hogy oldalanként 10 post jelenjen meg. (Persze ha 15-öt szeretnénk oldalanként, akkor 10 helyett 15-öt kell írnunk).
Következő lépésként a controller-ben kell módosítanunk a listázást. Ez esetünkben az app/controller/posts_controller.rb
fájl, melynek az index method-ját módosítjuk:
# Ezt egészítsük ki
def index
@posts = Post.all
end
# Erre
def index
@posts = Post.order(:created_at).page(params[:page])
end
Végül a view-ban jelenítsük meg a lapozót, ahol szeretnénk. Ezt a példában az app/views/posts/index.html.erb fájlban az alábbi módon tehetjük meg:
<%= paginate @posts %>
Ezzel meg is volnánk, az oldalon megjelenik a lapozó!
Részletesebb leírás és sok példa elérhető Github-on: amatsuda/kaminari