2016-07-26 4 views
-3
class CommentsController < ApplicationController 
    def users_comments 
    posts = Post.all 
    comments = posts.map(&:comments).flatten 
    @user_comments = comments.select do |comment| 
     comment.author.username == params[:username] 
    end 
    end 
end 
+1

Welchen Fehler bekommen Sie? Bitte erstellen Sie Ihre Fragen mit Fehler und Logs –

+0

1. Sie sollten nicht verwenden .all, es wird alle Datensätze im Speicher, die die Antwortzeit erhöhen wird 2. Sie sollten eifrig laden verwenden. Lies darüber [hier] (http://guides.rubyonrails.org/active_record_querying.html) –

Antwort

1

Dies wird so viele Abfragen erzeugen. Dieses Problem wird n + 1 genannt (siehe hier: https://www.sitepoint.com/silver-bullet-n1-problem/).

Ich schlage vor, mit so etwas wie diesem Code:

@user_comments = Comment.where(author: { username: params[:username] }) 

Ich glaube, Sie nicht brauchen die Beiträge habe ich recht?

-1

Dadurch wird ActiveRecord angewiesen, die entsprechenden Kommentar- und Autoreneinträge sofort nach der ersten Anforderung für alle Posts aus der Datenbank abzurufen, wodurch die Anzahl der Datenbankanforderungen auf nur drei reduziert wird.

0

Es ist nur eine normale allgemeine Frage, die jeder googlen kann, da es die kleinste Änderung am bestehenden Code erfordert und keine Annahmen bezüglich der umgekehrten Zuordnung von Kommentar zu Beitrag macht. Lesen Sie mehr Interessante Fakten über Ruby on Rails Development von hier

Verwandte Themen