Мы рассчитываем статистику для нашего клиента. Статистика рассчитывается для каждого 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
В представлении, мы выводим одну строки для каждого SpecialtyLevel
, с одной колонкой для каждого 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, чтобы сделать некоторые действительно обалденный материал с результат, который он мне дает.
Вопрос в том, есть ли другой способ, который я могу использовать для возврата правильного значения? Или есть способ, которым я могу настроить свою область действия, чтобы предотвратить это вмешательство?
Но как бы я своего рода виртуальным атрибутом? Сортировка происходит на уровне базы данных. – Samo
Что касается того, что возвращается, оно возвращает правильные строки, из которых я уверен. – Samo