Heroku スタックが更新され、will_paginate エラーが発生するようになりました
概要
そこで、Web アプリの Heroku スタックを更新し、ruby 3.2.2 と will_paginate 4.0 を使用していますが、ページネーション ページの 1 つでエラーが発生しています。私が得ている具体的なエラーは
2023-06-15T00:33:11.759517+00:00 app[web.1]: Rendered users/index.html.erb within layouts/application (Duration: 2.6ms | Allocations: 1025)
2023-06-15T00:33:11.759543+00:00 app[web.1]: Rendered layout layouts/application.html.erb (Duration: 2.7ms | Allocations: 1069)
2023-06-15T00:33:11.759701+00:00 app[web.1]: Completed 500 Internal Server Error in 7ms (ActiveRecord: 2.5ms | Allocations: 2352)
2023-06-15T00:33:11.760282+00:00 app[web.1]:
2023-06-15T00:33:11.760282+00:00 app[web.1]: ActionView::Template::Error (wrong number of arguments (given 4, expected 3)):
2023-06-15T00:33:11.760282+00:00 app[web.1]: 13: <h3><%= link_to "Create New Dude", new_user_path %></h3>
2023-06-15T00:33:11.760283+00:00 app[web.1]: 14: <% end %>
2023-06-15T00:33:11.760283+00:00 app[web.1]: 15:
2023-06-15T00:33:11.760284+00:00 app[web.1]: 16: <%= will_paginate %>
2023-06-15T00:33:11.760284+00:00 app[web.1]: 17:
2023-06-15T00:33:11.760284+00:00 app[web.1]: 18: <table>
2023-06-15T00:33:11.760284+00:00 app[web.1]: 19: <thead>
2023-06-15T00:33:11.760284+00:00 app[web.1]:
2023-06-15T00:33:11.760285+00:00 app[web.1]: app/views/users/index.html.erb:16
実際のコードでは、
<%= will_paginate %>
<table>
<thead>
<th></th> <!-- Icon -->
... a bunch of stuff you don't need to see ...
</thead>
<tbody>
<%= render @users %>
</tbody>
</table>
<%= will_paginate %>
will_paginate 4.0 で、引数の数が間違っている (指定された数が 4、予想されるのは 3) という特定のエラーがスローされる理由について、明確なドキュメントが見つかりません。私が見つけることができる唯一のことは、ここ https://github.com/mislav/will_paginate で使用される新しい基本的な will_paginate です。ページネーションに使用していたテーブルを何らかの方法で新しい構造にバンドルする必要がありますか?
ご協力をいただければ幸いです。
解決策
will_paginate の新しいバージョンは、オプション ハッシュを 3 番目の引数として受け取らなくなりました。代わりに、すべてのオプションをキーワード引数として渡す必要があります。したがって、コードを次のように変更する必要があります。
<%= will_paginate @users, per_page: 10 %>
<table>
<thead>
<th></th> <!-- Icon -->
... a bunch of stuff you don't need to see ...
</thead>
<tbody>
<%= render @users %>
</tbody>
</table>
<%= will_paginate @users, per_page: 10 %>
per_page オプションは、ページごとに表示するレコードの数を指定するために使用されます。この場合は 10 に設定しています。
他のオプションをキーワード引数として will_paginate に渡すこともできます。たとえば、レンダラー オプションを渡してカスタム ページネーション レンダラーを指定できます。