У меня есть модель Schools и модель PerformanceStats.
PerformanceStat
belongs_to :school
School
has_one :performance_stat
На индексной странице PerformanceStat отображаются все 2000 показателей производительности, а также school.name, school.score и school.city, иМне нужен доступ к school.id и school.slug.
Контроллер:
def index
@performance_stats=PerformanceStat.all
end
Мой код просмотра:
<tbody>
<% @performance_stats.each do |stat| %>
<% school = School.find(stat.school_id)%>
<tr>
<td><%= link_to school.name, school_path(city: school.city.parameterize.truncate(80, omission: ''), slug: school.slug) %></td>
<td><%= number_with_precision(school.score, precision: 2)%></td>
, затем представление переходит к отображению статистики производительности.
Этот просмотр загрузкиочень медленно .... 10-20 секунд.Как я могу ускорить процесс?Я пробовал PerformanceStats.scoped, собирал школьную статистику и выбирал из массива, но, похоже, это не помогло.Могу ли я получить доступ к школьным атрибутам, не найдя школу для каждого PerformanceStat?Я считаю, что School.find немного замедляет ход событий.
У меня есть индексы: school_id в PerformanceStat и: score,: slug в модели School.
ОБНОВЛЕНИЕ:
Предложение в выбранном ответе добавить кешпривел к этой строке кода в действии индекса SchoolsController:
fresh_when etag: @performance_stats
Время загрузки сократилось до 18 мс.Это решение прекрасно работает для меня, потому что содержание действия индекса не меняется часто.Эти данные обновляются раз в год. Эта ссылка содержит другие предлагаемые решения для кэширования данных, которые часто изменяются.