← Retour aux Labs

Rails Performance Challenge

Cette page Rails déclenche un problème de performance. Lequel ?

Analysez ce code Ruby on Rails et choisissez la meilleure correction.

# app/controllers/admin/courses_controller.rb
def index
  @courses = Course.order(created_at: :desc).limit(50)
end

# app/views/admin/courses/index.html.erb
<% @courses.each do |course| %>
  <tr>
    <td><%= course.reference %></td>
    <td><%= course.customer.full_name %></td>
    <td><%= course.created_at.strftime('%d/%m/%Y') %></td>
  </tr>
<% end %>

Quelle est la meilleure réponse ?

Solution senior

Précharger les associations pour éviter les requêtes inutiles.

# Correction
def index
  @courses = Course
    .includes(:customer)
    .order(created_at: :desc)
    .limit(50)
end

Sur une page avec 50 courses, sans préchargement, Rails peut générer 1 requête pour les courses + 50 requêtes pour les clients. Avec includes(:customer), Rails réduit fortement le nombre de requêtes.

Besoin d’aide sur Rails ?

Votre application Rails devient lente ou difficile à maintenir ?

J’accompagne les équipes sur l’audit, la performance PostgreSQL, la refactorisation, les APIs et l’architecture Ruby on Rails.