クライアントの統計を計算しています。統計は ごとに計算されSpecialtyLevel
、各統計には多数のエラー フラグが含まれる場合があります (検証エラーと混同しないでください)。関係は次のとおりです (以下のすべてのクラスは複数のモジュール内にネストされていますが、簡単にするためにここでは省略しています)。
class SpecialtyLevel < ActiveRecord::Base
has_many :stats,
:class_name =>"Specialties::Aggregate::Stat",
:foreign_key => "specialty_level_id"
.......
end
class Stat < Surveys::Stat
belongs_to :specialty_level
has_many :stat_flags,
:class_name => "Surveys::PhysicianCompensation::Stats::Specialties::Aggregate::StatFlag",
:foreign_key => "stat_id"
......
end
class StatFlag < Surveys::Stats::StatFlag
belongs_to :stat, :class_name => "Surveys::PhysicianCompensation::Stats::Specialties::Aggregate::Stat"
......
end
このビューでは、 ごとに 1 つの行が表示され、それぞれSpecialtyLevel
に 1 つの列が表示され、もう 1 つの列Stat
はその のエラー フラグがあるかどうかを示しますSpecialtyLevel
。クライアントは、エラー フラグの数でテーブルをソートできるようにしたいと考えています。これを実現するために、SpecialtyLevel
クラスにスコープを作成しました。
scope :with_flag_counts,
select("#{self.columns_with_table_name.join(', ')}, count(stat_flags.id) as stat_flags_count").
joins("INNER JOIN #{Specialties::Aggregate::Stat.table_name} stats on stats.specialty_level_id = #{self.table_name}.id
LEFT OUTER JOIN #{Specialties::Aggregate::StatFlag.table_name} stat_flags on stat_flags.stat_id = stats.id"
).
group(self.columns_with_table_name.join(', '))
これで、データベースから返された各行には、stat_flags_count
並べ替えることができるフィールドが含まれます。これは問題なく動作しますが、次のコードを使用してページ分割しようとすると問題が発生します。
def always_show_results_count_will_paginate objects, options = {}
if objects.total_entries <= objects.per_page
content_tag(:div, content_tag(:span, "Showing 0-#{objects.total_entries} of #{objects.total_entries}", :class => 'info-text'))
else
sc_will_paginate objects, options = {}
end
end
なんらかの理由で、objects.total_entries
1 が返されます。私のスコープ内の何かが原因で、Rails が得た結果セットに対して非常にファンキーな処理を行っているようです。
問題は、正しい値を返すために使用できる別の方法があるかどうかです。または、この干渉が発生しないようにスコープを調整する方法はありますか?