1

Ich habe ein Raster von Posts, wo ein Benutzer N + 1 Abfragen mögen oder nicht mögen kann.Rails 4 bedingte Render-Ursache N + 1 Abfrage

Ich bin Rendering eine Sammlung von Post, die teilweise die hat:

<%= post.title %> 
<% if current_user.liking?(post) %> 
    <%= render partial: 'posts/unlike' %> 
<% else %> 
    <%= render partial: 'posts/like' %> 
<% end %> 
... 

Controller-Benutzer:

def show 
    @user = User.find(params[:id]) 
    @feed = @user.posts.paginate(page: params[:page]) 
end 

Dies wird für jede Stelle eine Abfrage verursacht. Ich mit .include obwohl (: gefällt), aber ich weiß nicht, wie es zu tun für ‚current_user‘

Edit:

ich eine zweite Abfrage für Gleichen, das ist die Schaffung endete gehören current_user

@liking_items = @feed.includes(:likes).where(likes: { user_id: current_user }) 

Antwort

1

Da Sie die current_user haben, können Sie fügen Sie einfach eine where:

@user.post.includes(:likes).where(likes: { user_id: current_user })

(Ich gehe davon aus, dass der "like owner" user_id ist).

+0

@user ist derjenige, der gepostet hat und current_user ist der eingeloggte Benutzer, der einen Beitrag mögen oder nicht mögen kann. Wie kannst du das meiner Meinung nach weitergeben? –

+0

Sie müssen nur die Beiträge filtern und dann an die Ansicht übergeben, wie Sie es tun. – dpedoneze

+0

Ich vermute, Sie Abfrage ist falsch, weil es Post, die user_id hat: current_user und das ist nicht der Anwendungsfall. Ich brauche Likes mit user_id: current_user –