如何获取用户在 SQL 或 Ruby 中评论的页面上的最新评论?
Posted
技术标签:
【中文标题】如何获取用户在 SQL 或 Ruby 中评论的页面上的最新评论?【英文标题】:How to get recent comments on pages that the user commented on in SQL or Ruby? 【发布时间】:2014-03-20 16:12:49 【问题描述】:如何以优化的方式为用户获取所有相关的 cmets? 相关评论是对用户保存的页面和/或用户评论的页面上的(最近)评论。下面是我当前的代码,但它很长而且不是最优的。我该如何修复它,无论是使用 Ruby 还是 SQL,它都可以快速返回 cmets?
def self.relevant_comments(user)
recent_comments = Comment.newest.first(50) #check through 50 most recent comments
saved_pages = user.saved_pages.to_set #get all of user's saved pages
commented_pages = Set.new
user.comments.each |comment| commented_pages.add comment.page #get all the pages of user's comments
#now go through the sets and put the relevant comments into `comments`
comments = Set.new
recent_comments.each do |comment|
page = comment.page
comments.add(comment) if saved_pages.include?(page) or commented_pages.include?(page)
break if comments.size >= 10
end
return comments
end
【问题讨论】:
【参考方案1】:尝试对页面进行预过滤,如下所示:
def self.relevant_comments(user)
recent_comments = Comment.newest.first(50) #check through 50 most recent comments
recent_page_ids = recent_comments.map(&:page_id)
saved_pages = user.saved_pages.where(id: recent_page_ids).to_set #get all of user's saved pages
commented_pages = Set.new
user.comments.where(page_id: recent_page_ids).each |comment| commented_pages.add comment.page #get all the pages of user's comments
#now go through the sets and put the relevant comments into `comments`
comments = Set.new
recent_comments.each do |comment|
page = comment.page
comments.add(comment) if saved_pages.include?(page) or commented_pages.include?(page)
break if comments.size >= 10
end
return comments
end
【讨论】:
以上是关于如何获取用户在 SQL 或 Ruby 中评论的页面上的最新评论?的主要内容,如果未能解决你的问题,请参考以下文章
ruby 如何从用于客户端身份验证的X509证书中获取电子邮件。该电子邮件可用于在Devise或中设置当前用户
在 TCPServer (Ruby) 中,我如何从客户端获取 IP/MAC?