読者です 読者をやめる 読者になる 読者になる

acts-as-taggable-on と kaminari を組み合わせてハマったのでメモ

acts-as-taggable-on では

Entry.tag_counts

で Entry に付けられているすべてのタグを取得できるが、これに kaminari を組み合わせて

Entry.tag_counts.page(1).per(20).total_count

という風にページングした上で全件数を取得しようとすると

ArgumentError: wrong number of arguments (2 for 0)

というエラーが発生する。

原因は、kaminari が件数を取得するとき count に引数を渡しているけど、 acts-as-taggable-on で引数を受け取らない count を再定義しているため。 引数を受け取らないメソッドに引数を渡していて、エラーが発生してしまっていた。

英語が不自由なので、acts-as-taggable-on が count を再定義している理由は把握できなかったけど、とりあえず

module ActsAsTaggableOn::Taggable
  module Collection
    module CalculationMethods
      def count(column_name=:all, options={})
        super
      end
    end
  end
end

上記のモンキーパッチで回避した。