will_paginate 用のカスタム リンク レンダラーを作成し、コードを lib/my_link_renderer.rb に配置しました。
require 'will_paginate/view_helpers/link_renderer'
require 'will_paginate/view_helpers/action_view'
class MyLinkRenderer < WillPaginate::ActionView::LinkRenderer
include ListsHelper
def to_html
html = pagination.map do |item|
item.is_a?(Fixnum) ?
page_number(item) :
send(item)
end.join(@options[:link_separator])
html << @options[:extra_html] if @options[:extra_html]
@options[:container] ? html_container(html) : html
end
end
次に、次のように使用します。
<%= will_paginate @stuff,
:previous_label=>'<input class="btn" type="button" value="Previous"/>',
:next_label=>'<input class="btn" type="button" value="Next" />',
:extra_html=>a_helper,
:renderer => 'WillPaginate::ActionView::MyLinkRenderer'
%>
最初は機能しますが、2 回目は初期化されていない定数 WillPaginate::ActionView::MyLinkRenderer エラーが発生します。config/application.rb で lib からアプリケーションにファイルを正しくロードしていると思います。
# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/extras)
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
コンソールでも同じ問題が発生します。
system :001 > WillPaginate::ActionView::MyLinkRenderer
=> MyLinkRenderer
system :002 > WillPaginate::ActionView::MyLinkRenderer
NameError: uninitialized constant WillPaginate::ActionView::MyLinkRenderer
これは、Rails が物事を自動ロードする方法と関係があると思われます。自動ロードを使用すべきではありませんか? 「./lib/my_link_renderer」を明示的に要求する必要がありますか?
これは本番サーバーでのみ発生することに注意してください。