Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kaminari

 Kaminari

ページャNight <[1]> の発表 "ふつうのページャーをつくろう"の発表スライド http://www.zusaar.com/event/5477013

Akira Matsuda

July 04, 2014
Tweet

More Decks by Akira Matsuda

Other Decks in Programming

Transcript

  1. "Automatic pagination for every action in a controller" class PersonController

    < ApplicationController model :person paginate :people, :order => 'last_name, rst_name', :per_page => 20 # ... end
  2. "Pagination for a single action" def list @person_pages, @people =

    paginate :people, :order => 'last_name, rst_name' end
  3. PHPͷΠέͯΔ΍͔ͭΒύΫͬͨ ☇"Rails pagination code is really bad" ☇"stealing some PHP

    code" ☇"I nd Digg-style Pagination" ☇"you take 120 lines of PHP and slim it down to around 40 in Ruby"
  4. ࠷ॳظͷREADMEΑΓ Quick quiz: Where does pagination logic belong? a) in

    the model; b) in the controller; c) in views; d) all of the above.
  5. Rails 3.0࣌୅ ☇ Ralis 2.3 -> 3.0ͷϝδϟʔόʔδϣϯ ΞοϓͰRailsͷ಺෦ߏ଄͕େ͖͘มԽ ☇ Rails

    2࣌୅ͷϓϥάΠϯ͕͍Ζ͍Ζࢮ๢ ☇ ۀ຿Ͱ։ൃ͍ͯͨ͠Rails 3.0ͷΞϓϦͰ ಈ࡞͢ΔϖʔδωʔγϣϯϥΠϒϥϦ͕ ͳ͔ͬͨ ☇ …ͷͰ͔ͨ͠ͳࣗ͘෼Ͱ࡞ͬͨ
  6. kaminari/active_record.rb (ൈਮ) kls.class_eval do scope :page, lambda {|num| offset(PER_PAGE *

    ([num.to_i, 1].max - 1)).limit(PER_PAGE) } do def per(num) offset(offset_value / limit_value * num).limit(num) end def num_pages (except(:offset, :limit).count.to_f / limit_value).ceil end def current_page (offset_value / limit_value) + 1 ennnnnnnd
  7. ݱࡏ࣮ߦ͞Ε͍ͯΔCI ☇Ruby 1.8.7, 1.9.3, 2.0.0, 2.1, ruby- head, jruby, rbx-2

    ☇ActiveRecord 30, 31, 32, 40, 41, edge, DataMapper 12, MongoMapper, Mongoid 24, 30, 31, 40 ☇Rails֤όʔδϣϯ, Sinatra 13, 14
  8. end