1

クライアントの統計を計算しています。統計は ごとに計算され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_entries1 が返されます。私のスコープ内の何かが原因で、Rails が得た結果セットに対して非常にファンキーな処理を行っているようです。

問題は、正しい値を返すために使用できる別の方法があるかどうかです。または、この干渉が発生しないようにスコープを調整する方法はありますか?

4

2 に答える 2