1

次のコードがあります

# Gemfile

gem 'will_paginate'


# /config/initializers/will_paginate_array.rb

require 'will_paginate/collection'

Array.class_eval do
  def paginate(page = 1, per_page = 15)
    WillPaginate::Collection.create(page, per_page, size) do |pager|
      pager.replace self[pager.offset, pager.per_page].to_a
    end
  end
end


# /app/controllers/games_controller.rb

def show
  @presenter = GamesPresenter.new(json)
  @games = @presenter.games.paginate(params[:page], 5)
end


# /app/views/games/index.html.erb

<% @games.each do |game| %>
  ...
<% end %>

<%= will_paginate @games %>

しかし、params[:page] を渡そうとするline @games = @presenter.games.paginate(params[:page], 5)params[:page] 、nil になります。なぜこれが当てはまるのか、誰かが知っていますか?. page.blank の場合、page=1 を追加しますか? 最初のページの結果しか表示されません..何か提案はありますか?

4

1 に答える 1

3

params[:page]デフォルトでは ですnil。class_eval を次のように変更して、このシナリオを処理することをお勧めします

def paginate(page = 1, per_page = 15)
  page ||= 1
  WillPaginate::Collection.create(page, per_page, size) do |pager|
    pager.replace self[pager.offset, pager.per_page].to_a
  end
end

nil最初のパラメーターとして渡すと1、値を明示的に渡したために使用されません。

于 2013-03-12T15:00:59.403 に答える