1

我有六个模型。User, Channel, FeedArticle,CommentRelationship模型 用于连接UserChannel,UserArticle用于用户最喜欢的文章。

这是我的人际关系:

我的人际关系

每个用户都有一些频道,并且相应地通过这些频道,他有文章,我认为它是这样的:

@articles = FeedArticle.find(:all,
       joins: "INNER JOIN relationships on feed_articles.channel_id = relationships.channel_id",
       conditions: "relationships.user_id = #{current_user.id} and relationships.channel_id  in (#{current_user.channels.map(&:id).join(',')})")

因此,如果两个用户拥有相同的频道,他们就可以拥有相同的文章。但是每个用户对他的文章都有独特的评论,以及独特的喜爱文章。

对我来说问题是:我检查了每篇文章,有没有评论给这个用户?,还检查了最喜欢的。我这样做:

检查评论:

current_user.comments.where(feed_article_id: article.id) 

和最爱:

current_user.user_articles.where(feed_article_id: article.id).present?

这是有效的,但在每篇文章中,我都有两个查询:

(0.9ms)  SELECT COUNT(*) FROM "user_articles" WHERE "user_articles"."user_id" = 3 AND "user_articles"."feed_article_id" = 45
  UserArticle Load (1.0ms)  SELECT "user_articles".* FROM "user_articles" WHERE "user_articles"."user_id" = 3 AND "user_articles"."feed_article_id" = 45 LIMIT 1
  Rendered layouts/_remove_from_favourite.html.haml (6.9ms)
   (0.6ms)  SELECT COUNT(*) FROM "comments" WHERE "comments"."user_id" = 3 AND "comments"."feed_article_id" = 45
  Rendered layouts/_add_comment.html.haml (12.8ms)

如何优化此查询?还是最好使用分页而不用担心?

4

0 回答 0