如何获取用户在 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?

如何使用 BeautifulSoup 从 HTML 中去除评论标签?

如何从包含所有喜欢和评论的页面中获取所有帖子?

如何向用户显示已输入新评论