上周浏览次数最多的使用印象派宝石的物品

2024-02-27

我有邮政模型,它是impressionable using 印象派 https://github.com/charlotte-ruby/impressionist宝石 我想显示上个月访问量最高的 10 个帖子。

这是我想出的方法:

Post.all.sort_by{|post| post.view_count_last_month}.first 10

and view_count_last_month方法在Post model:

def view_count_last_week
    impressionist_count(:start_date => 1.week.ago)
end

但我认为这对性能不利,因为它加载所有帖子,然后按view_count_last_month method.

最好的方法是什么?

Thanks


通过查看印象派 https://github.com/charlotte-ruby/impressionist宝石代码为协会 https://github.com/charlotte-ruby/impressionist/blob/master/lib/impressionist/is_impressionable.rb#L15-L20 and in 印象派计数 https://github.com/charlotte-ruby/impressionist/blob/master/app/models/impressionist/impressionable.rb#L31-L49,您实际上可以像这样创建自己的范围:

  scope :order_by_starting_at, -> (start_date){ 
    impressions_table = Impression.quoted_table_name

    query = if start_date.present?
      "#{impressions_table}.created_at >= '#{start_date}' AND "
    else
      ''
    end

    query += "#{impressions_table}.created_at <= '#{Time.now}'"

    order(%Q{
            COALESCE((
              SELECT
                COUNT(#{impressions_table}.impressionable_id)
              FROM
                #{impressions_table}
              JOIN
                #{Post.quoted_table_name} AS popular_posts
              ON
                popular_posts.id = #{impressions_table}.impressionable_id
              AND
                #{impressions_table}.impressionable_id = '#{self.to_s}'
              WHERE
                #{query}
             ), 0) DESC
          })
    }

  scope :view_counts_for_first,-> (number){  
    order_by_starting_at.limit(number) 
    }

现在你可以:

Post.order_by_starting_at(1.week.ago).limit(10)
Post.order_by_starting_at.limit(10)

EDIT:

然而,事实证明,这样的效果更好——

Post.joins(:impressions).where("impressions.created_at<='#{Time.now}' and impressions.created_at >= '#{start_time}'").group("impressions.impressionable_id").order("count(impression‌​s.id) DESC")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

上周浏览次数最多的使用印象派宝石的物品 的相关文章

随机推荐

  • 使用 jQuery POST json 来表达

    我在将 JSON 数据从客户端发送到运行 Express 的节点服务器时遇到问题 这是一个简单的服务器 它演示了我的问题 var express require express var app express app configure f
  • Firefox Addon 观察者 http-on-modify-request 无法正常工作

    我有一个weird我的插件中的错误 插件本身需要添加特定域的请求头参数 一切正常 但错误是 观察者 http on modify request 在开始时不会被调用 只有当我重新加载页面时 它才会工作 I mean 我访问 mysite c
  • python - 从图表区域中切出双条

    I am plotting a double bar graph and line graph on the same chart For the first and last x tick only one bar is visible
  • 在 JavaScript 中,confirm() 是如何工作的

    我当时正在思考 JavaScript 中的原生函数是如何工作的 我可以跨越alert 我想它必须使用createElement 或制作一个元素并使用innerHTML 但我无法弄清楚创建弹出元素并创建两个按钮 然后返回所需的完整代码true
  • 摩卡的全局“before”和“beforeEach”?

    我现在使用 mocha 进行 javascript 单元测试 我有几个测试文件 每个文件都有一个before and beforeEach 但它们是完全相同的 我如何提供全球before and beforeEach对于他们所有人 或其中一
  • 如何使用 HTML5 本地存储保存表单中的数据?

    我有一个表单可以登录到一个网站 但不能登录到我的网站 我希望它们通过 HTML5 本地存储保存在我的网站中的表单数据 但不知道如何 任何想法 我的表格是这样的
  • YouTube 嵌入式播放器在 iOS 8 上因 gpus_ReturnNotPermissionKillClient 而崩溃

    我使用 UIWebView 制作了一个 iOS 应用程序 它加载 YouTube iFrame 播放器 一切都很顺利 它甚至可以继续在后台播放视频 只有一个问题 这个问题是这个月才出现的 而且不仅出现在最新的更新 iOS 8 3 上 而且出
  • Dropzone.js 和 ajax

    我使用 dropzone js 并使用 ajax 加载它 我的菜单 ID menu 上传文件应出现在 div1 中 回调函数不起作用 我用alert test 替换了Dropzone discover document ready func
  • 编译简单字符串

    只是想知道 c 或 c 中是否有任何内置函数可以让您在运行时使用编译器 例如 如果我想翻译 print hello world into MessageBox Show hello world 然后生成一个exe 然后就可以显示上面的消息了
  • Django:如何通过可视化创建用户操作日志/跟踪

    我正在寻找一种工具来跟踪用户操作 例如 用户已登录 用户更改密码 用户通过电子邮件收到帐单 用户登录 用户上传的图片 用户发送消息 我可以将其包含到我的 Django 项目中 之后我想构建查询并向系统询问以下内容 用户在一个月内发送消息的频
  • redux getState() 不返回更新后的状态

    让我卡住了好几天的问题是 虽然我的 redux devtool 显示成功的状态更新 没有任何类型的突变 并且视图组件重新渲染成功 但是当我调用 getState 时 它总是返回初始状态并且不关心更新状态 任何知道什么会造成这种情况的人请帮助
  • 在Python中从数组中删除空元素

    with open text txt r as file for line in file line line rstrip n split print line 我在尝试删除正在生成的一系列数组中的空列表时遇到问题 我想让每一行都成为一个
  • Realm Studio:无法打开领域...顶部数组无效(参考:34280,大小:11)

    Realm 正在我的反应本机应用程序中运行 在 iPad 模拟器上运行 我找到了 default realm 文件 但在尝试使用 Realm Studio 打开它时收到错误 无效的顶部数组 Realm Studio 可以很好地打开下载的演示
  • 重新抛出 InvocableTargetException 目标异常

    如何重新抛出 IncationTargetException 的目标异常 我有一种方法 它使用反射来调用我的一个类中的 invoke 方法 但是 如果我的代码中抛出异常 我不关心 InvocableTargetException 只需要目标
  • D3:如何显示大数据集

    我有一个包含 10 5 个数据点的大型数据集 现在我正在考虑以下与大数据集相关的问题 有没有有效的方法来可视化非常大的数据集 就我而言 我有一个用户集 每个用户有 10 3 个项目 总共有 10 5 项 我想一次显示每个用户的所有项目 以便
  • 如何用cookie记住显示和隐藏div

    我有这样的 HTML div content is visible div div Button Expand div 我使用 Jquery 显示 隐藏 div 如下所示 document ready function expand hid
  • 如何获取mysql中最后一条之前的最后一条记录?

    如果最后一条记录是记录 35 如何获取表的记录 34 最简单的方法 SELECT FROM tab ORDER BY col DESC LIMIT 1 1 这将从第二个 LIMIT 1 1 开始选择一个记录 意味着跳过第一个并选择下一个 必
  • SignalR 中消息的最大限制

    我正在尝试通过 SignalR 发送通知 它工作完美 但是我们可以通过 SignalR 发送的消息的最大大小是多少 官方有这样的限制吗 https github com SignalR SignalR issues 1205 https g
  • Spring Security SAML 断言过期和应用程序会话过期

    我对 SAML 断言到期与应用程序会话到期感到困惑 简而言之 当我们将应用程序部署在容器中时 就会创建一个会话 可以使用 web xml 中的以下条目控制此会话过期
  • 上周浏览次数最多的使用印象派宝石的物品

    我有邮政模型 它是impressionable using 印象派 https github com charlotte ruby impressionist宝石 我想显示上个月访问量最高的 10 个帖子 这是我想出的方法 Post all