次のURLを参照してください。
https://github.com/amatsuda/kaminari/pull/77
https://github.com/tbeauvais/kaminari/commit/23695cbdc4ff1b9fa58c18d4a3c2f18e21451b8b
しかし、Rails3.1.0では失敗しました。
Rails 3.1.0の場合、Rails.root / initializers/kaminari_for_distinct.rbを作成します。そして、次のコードを使用します。
module Kaminari
module ActiveRecordRelationMethods
extend ActiveSupport::Concern
module InstanceMethods
def total_count #:nodoc:
if distinct_column_name.nil?
c = except(:offset, :limit).count
else
c = except(:offset, :limit).count(distinct_column_name, :distinct => true)
end
# .group returns an OrderdHash that responds to #count
c.respond_to?(:count) ? c.count : c
end
# Get the column name used in distinct query.
# This could have been set on the Model class, or the ActiveRecord::Relation
def distinct_column_name
@distinct_column || distinct_column
end
end
end
end
module Kaminari
module ConfigurationMethods
extend ActiveSupport::Concern
module ClassMethods
# Set the name of the column to use during .count()
# Setting this will cause call to count to use: count(:id, :distinct => true) for all the Models paged queries.
# Example:
# class User < ActiveRecord::Base
# use_distinct :id
# end
def use_distinct(column)
@distinct_column = column
end
# Returns the distinct column name set on the Model, or nil if not using distinct
def distinct_column
@distinct_column
end
end
end
end
module Kaminari
module PageScopeMethods
extend ActiveSupport::Concern
module InstanceMethods
# Set the name of the column to use during .count()
# Setting this will cause call to count to use: count(:id, :distinct => true)
# Example: User.page(3).per(5).use_distinct(:id)
def use_distinct(column)
@distinct_column = column
self
end
end
end
end