我有六个模型。User
, Channel
, FeedArticle
,Comment
和Relationship
模型 用于连接User
和Channel
,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)
如何优化此查询?还是最好使用分页而不用担心?