2017-02-07 2 views
0

Angenommen, ich zeige allen Benutzern ihre Beiträge wie unten gezeigt.Schienen 4: Soll ich Relationen im Controller laden

<% @users do |user| %> 
    <div><%= user.name %> : </div> 
    <% user.posts.each do |post| %> 
     <div><%= post.title %></div> 
    <% end %> 
<% end %> 

Ist es besser, die Posts (speziell für Datenbankgeschwindigkeit) vorher im Controller zu laden?

@users = User.includes(:posts) 

oder ist es besser, nur die Benutzer zu holen und die Post in der Ansicht laden?

@users = User.all 

Antwort

0

Wenn Sie durch eine Sammlung durchlaufen und ein Kind assocations Zugriff auf das schafft, was ein N + 1 Abfrage Problem genannt wird, in dem jeder Datensatz eine separate Datenbank-Abfrage erstellen wird.

Wenn eine einzelne Anfrage mit 100 Datenbankabfragen endet, wird Ihr Server in kürzester Zeit zum Stillstand kommen.

Also ja - Preloading-Verknüpfungen ist notwendig, um Anwendungen zu erstellen, die skalieren (oder sogar arbeiten). ActiveRecord provides several methods such as .includes, .preload, .eager_load, .join und .left_outer_joins (Rails 5), die jeweils unterschiedliche Ergebnisse liefern und für verschiedene Anwendungsfälle geeignet sind.

+0

Vielen Dank, das macht Sinn –

Verwandte Themen