Rails 选择 GROUP 中 COUNT 最高的对象

2024-02-18

目标是选择Store其中一个Coupon最常用于.

目前,我有这个,并且它有效(分解以供解释):

# coupon.rb
  has_many :redemptions
  has_and_belongs_to_many :stores

  def most_popular_store
    stores.find(        # Return a store object
      redemptions       # Start with all of the coupon's redemptions
      .group(:store_id) # Group them by the store_id
      .count            # Get a hash of { 'store_id' => 'count' } values
      .keys             # Create an array of keys
      .sort             # Sort the keys so highest is first
      .first            # Take the ID of the first key
    )
  end
###

它的用法如下:

describe 'most_popular_store' do
    it 'returns the most popular store' do
        # Create coupon
        coupon = FactoryGirl.create(:coupon)

        # Create two different stores
        most_popular_store = FactoryGirl.create(:store, coupons: [coupon])
        other_store        = FactoryGirl.create(:store, coupons: [coupon])

        # Add redemptions between those stores
        FactoryGirl.create_list(:redemption, 2, coupon: coupon, store: other_store)
        FactoryGirl.create_list(:redemption, 5, coupon: coupon, store: most_popular_store)

        # Verify
        expect(coupon.most_popular_store.title).to eq most_popular_store.title
    end
end

就像我说的,这个方法是有效的,但它看起来像是经过猴子补丁的。我怎样才能重构我的most_popular_store method?


我觉得你的方法其实行不通。count为您提供一个哈希值,其中键为 store_ids,值作为计数,然后运行keys在哈希上,它为您提供了一个 store_ids 数组。从那时起,您就失去了计数,您将按 store_ids 排序并获取第一个。您的测试通过的唯一原因是您在另一个商店之前创建了受欢迎的商店,因此它的 ID 较低(sort默认情况下按升序排序)。要获得正确的结果,请进行以下更改:

redemptions       # Start with all of the coupon's redemptions
  .group(:store_id) # Group them by the store_id
  .count            # Get a hash of { 'store_id' => 'count' } values
  .max_by{|k,v| v}  # Get key, val pair with the highest value
                    # output => [key, value]
  .first            # Get the first item in array (the key)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 选择 GROUP 中 COUNT 最高的对象 的相关文章

  • 视频无法使用 Paperclip Gem - Rails 中的 ffmpeg 上传

    我可以上传图像 但是 当我尝试上传视频时 它会显示为黑屏 并且播放按钮不起作用 我不确定我哪里错了 我需要视频播放器才能实现此功能吗 这可能是一个简单的解决方案 但是 我是 Rails 新手 任何帮助是极大的赞赏 谢谢 邮政模型 class
  • 如何在 rake 任务中强制使用 RAILS_ENV?

    我有这个小耙子任务 namespace db do namespace test do task reset do ENV RAILS ENV test Rake Task db drop invoke Rake Task db creat
  • Rails 身份验证插件推荐

    我想向我的 Rails 应用程序添加身份验证 我遇到了几个这样做的插件 acts as authenticated restful authentication Authlogic 等 我还没有看到一篇文章描述使用每种方法的差异 优点和缺点
  • MacOS 每秒唤醒次数错误

    构建 Rails 应用程序 ruby 2 4 0p0 Rails 5 1 4 并使用我的 Macbook Air MacOS High Sierra 10 13 2 进行本地测试 我不断遇到此问题 过去 241 秒内有 45001 次唤醒
  • 为什么 Rails 托管在 VM 上时会缓存视图文件并共享 Samba 上的代码库

    我有以下设置 我的本地计算机 OS X 上的代码作为 Samba 共享共享 在 Parallels 中运行的 Ubuntu VM 安装共享 在开发模式下运行 Rails 2 1 通过 Mongrel WEBrick 或乘客 如果我对视图进行
  • Ruby on Rails - 向所有路由添加 ID 参数

    我想知道在 Rails 路由中实现以下功能的最佳方法是什么 场景 一个网站 用户注册账户 gt accountID 账户 成为网站内的主要实体 例子 https basecamp com ID https basecamp com ID 将
  • Rails 序列化数据验证

    我有一个通过默认 AR 行为序列化为 YAML 的字段 例如 它目前位于哈希数组中 name gt hi url gt bye name gt hi url gt bye name gt hi url gt bye 有没有办法可以在其中一些
  • 如何在 Haml 中编写 if 条件?

    怎么写if and if elseRuby on Rails 应用程序的 Haml 语句 HAML 是基于缩进的 解析器可能很棘手 在 Haml 中不需要使用 end 请改用缩进 在 Haml 中 只要在 Ruby 计算命令之后增加缩进 就
  • Rails 3.0.0.beta 和 Facebooker:还有其他人看到以下内容吗?

    我的 Rails 服务器在安装 facebooker 插件后似乎崩溃了 任何有关解决此问题的建议都会很棒 我正在使用 Rails 3 0 0 beta 和 facebooker 以下是我看到的步骤和错误 rails v Rails 3 0
  • Rails 验证日期范围的唯一性

    我有一个涉及员工缺勤记录的应用程序 我需要确保每条记录的开始日期和结束日期不重叠 例如 如果我输入了从今天开始到明天结束的缺勤记录 则不可能以任何方式在该日期范围内输入另一个缺勤记录 所以我不能制作一个从前天开始 然后在后天或任何更晚的日期
  • Rails f.check_box 设置选中/未选中值

    所以我在 Rails 中得到了一个带有复选框的表单助手 我希望该复选框在选中或取消选中时具有 thatvalue 或 thisvalue 值 我还没有找到如何设置它的地方 f check box field 我发现了类似的东西 但它不起作用
  • 如何验证数值的小数位数?

    我在中间进行了验证 如下所示 validates numericality of shoe size message gt Please input a number 但这还不够 因为用户可以输入一些值 例如 42 222222221212
  • 在代码中的其他地方设计渲染符号=>向上/形式部分

    我刚刚开始使用 Devise 和 Rails3 我已经完成了身份验证并正在工作并了解基础知识 截至目前 在代表我的主页 首页的主控制器中 我有两个链接 一个链接到 注册 gt sign up 另一个链接根据登录 注销 gt sign in
  • 如何使用 ruby​​ 的循环和 haml 创建表?

    我正在尝试制作一个如下所示的 html 表 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 我的数据结构是这样的 f ary 1 250 这是我的哈姆尔代码 table border gt 1 tbody tr cnt 0 f
  • 如何检查水豚中的复选框?

    我正在使用 Rspec 和水豚 我怎样才能写一个步骤来检查checkbox 我试过了check按价值但它找不到我的checkbox 我不知道该怎么做 因为我实际上有相同的 ID 但值不同 这是代码
  • 使用Rails UJS,如何从函数提交远程表单

    我正在使用Rails UJS 我有一个表单设置来进行远程提交 如下所示
  • 是否可以让 Capistrano 通过反向 SSH 隧道进行结帐?

    我正在开发一个驻留在公共主机上的应用程序 但我必须将其源代码保存在公司防火墙后面的 Git 存储库中 我越来越very厌倦了通过缓慢的部署scp 复制整个存储库并在每次部署时通过 SSH 传送 并且希望远程主机只需执行git pull更新
  • 用于 RESTful 轨道应用程序的简单面包屑

    是否有任何辅助方法 除了默认 Rails 面包屑导航 http wiki rubyonrails org rails pages Breadcrumbs 为特定页面动态生成面包屑导航 而无需在 RESTful 应用程序中传递琐碎的参数 也就
  • Rails Searchkick / Elasticsearch has_many 和belongs_to 关联

    我尝试使用 Searchkick 运行搜索并基于多个模型返回 我的书本模型包含这个 class Book lt ActiveRecord Base searchkick has many book subjects has many sub
  • 自定义变形在rails3上不起作用?

    我正在使用 Rails 3 0 1 并在initializers inflections rb 中有以下代码 ActiveSupport Inflector inflections do inflect inflect irregular

随机推荐

  • 如何使用 AJAX 作为 iframe 的替代品?

    目前 我在网站上使用 iframe 来显示其他页面 例如表单 的内容 我遇到的问题是在登录页面上 当用户使用 iframe 内的表单登录时 它只显示登录 iframe 内的下一页 这是完全无用的 我听说 AJAX 对于此类事情更加灵活和动态
  • 使用代理时如何停止 NodeJS“Request”模块更改请求

    抱歉 如果这听起来令人困惑 我使用 NodeJS 请求模块编写了一个脚本 该模块在网站上运行并执行函数 然后返回数据 当我不使用代理时 通过将其设置为 false 该脚本工作得非常好 这不是不允许使用 Selenium puppeteer
  • 以编程方式获取Android中传入和传出呼叫的通话记录

    我正在制作一个应用程序 我想在其中获取所有来电 去电和未接来电的通话记录 我怎样才能做到这一点 这里的所有答案都使用managedQuery现在已弃用 它应该替换为getContext getContentResolver query 方法
  • 什么时候适合使用 C++11 *_until 超时函数而不是相应的 *_for 函数?

    在 C 11 中 until仅当使用稳定时钟 即仅以不变的速率向前移动的时钟 时 超时函数才会 按预期 运行 因为system clock不是一个稳定的时钟 这意味着像这样的代码的行为可能会非常令人惊讶 using namespace st
  • React Web 应用程序现在无法正常工作或部署

    I do not understand what I am doing wrong here It worked absolutely fine before this I was ready to deploy it to GitHub
  • C# 中的日期计算[重复]

    这个问题在这里已经有答案了 在我的应用程序 c 中我需要添加n距离今天的日期还有几天 我知道我可以使用DateTime AddDays n 方法 而且这个方法效果很好 但在我的情况下 我只想添加工作日 或仅添加 星期一 和 星期五 或任何其
  • 禁用 CAST AS 以优化实体框架中的查询

    我在用着实体框架5我想从中选择数据甲骨文10g数据库 问题是数据库表很大并且生成的查询实体框架是无效的 我想摆脱那些CAST column AS type 有什么设置可以关闭它们吗 C code var context new APPDB
  • 正则表达式可以是数字字符,也可以是字母数字但不仅仅是字母字符

    要验证必须同时包含数字和字母的字段 我可以使用 0 9 a zA Z a zA Z 0 9 0 9a zA Z 但我想另外接受仅数字字符串 你的意思是你至少想要一个号码 您可以使用前瞻断言 d a z d i
  • Pandas 获取映射函数中元素的索引

    我正在使用 pandas 来分析到不同节点的现有 ssh 会话 因为我已经解析了 ssh 守护进程日志 并且我有一个包含以下列的 DataFrame Node 建立连接的节点名称 会话 会话ID Start 指示连接何时开始的时间戳 Fin
  • 我应该如何为最终的 64 位编译器准备 32 位 Delphi 程序? [复制]

    这个问题在这里已经有答案了 可能的重复 迁移到 Delphi 2010 和 Unicode 时如何为 64 位做好准备 https stackoverflow com questions 1568685 how to also prepar
  • 从java调用带有表值参数的存储过程

    在我的应用程序中 我想执行类似的查询SELECT FROM 表 WHERE col IN list 其中 list 可以有可变的值 我正在使用 MS SQL 服务器数据库 当我用谷歌搜索这个问题时 我发现了这个链接 http www som
  • 如何检查 Kafka 中的消费者是否消费了某个主题

    如何检查特定消费者群体是否完全消费了某个主题 这相当于在标准排队系统中检查队列是否为空 这并不明显 因为每个消费者只能看到给定的分区 因此它不知道其组中的其他消费者是否消耗了他们的部分 我想这应该以某种方式完成AdminUtils or Z
  • 如何使div相对于父级的高度为100%?

    我坚持下面这样的事情 我需要将右上 div 设为 100 高度 其背景颜色将覆盖主 div 的整个高度 div style width 100 margin auto text align left border 1px solid 628
  • Magento 2 标签翻译显示大括号

    显示双花括号之间的多个翻译的标签 我在 Magento 2 的前端和后端都遇到这个问题 这是我到目前为止所尝试过的 清除并刷新缓存 重新部署静态内容 将 Magento 2 2 5 更新至 2 2 6 请查看图片以获取更多信息 Magent
  • 如何获取 JavaFX 中某个阶段的关闭事件?

    在JavaFX中 如果用户单击阶段的关闭按钮 X 最右上方的十字 如何获取事件 我希望我的应用程序在窗口关闭时打印调试消息 System out println Application Close by click to Close But
  • 为什么表别名通常都是小写?

    我总是这样看例子 但为什么呢 这是一个好的做法吗 因此它们与查询的其余部分 通常以大写形式编写 不同 至于这是否是最佳实践 如果您以全部大写形式编写查询 那么它肯定会使您的查询更易于阅读和理解
  • 如果代码中没有 return 语句,函数在 C 程序中返回什么

    我做了一个关于如何在 C 中递归地反转单链表的函数 功能如下 struct node reverseSLL2 struct node p struct node temp struct node temp1 if p NULL temp1
  • NEST 查询精确文本匹配

    我正在尝试编写一个 NEST 查询 该查询应根据精确的字符串匹配返回结果 我在网上研究过 有关于使用术语 匹配 匹配短语的建议 我已经尝试了所有这些 但我的搜索返回的结果包含部分搜索字符串 例如 在我的数据库中 我有以下几行电子邮件地址 电
  • 如何实施xgboost增量训练?

    问题是由于列车数据大小 我的列车数据无法放入 RAM 中 所以我需要一种方法 首先在整个训练数据集上构建一棵树 计算残差构建另一棵树等等 就像梯度提升树一样 显然如果我打电话model xgb train param batch dtrai
  • Rails 选择 GROUP 中 COUNT 最高的对象

    目标是选择Store其中一个Coupon最常用于 目前 我有这个 并且它有效 分解以供解释 coupon rb has many redemptions has and belongs to many stores def most pop