Rails 3 使用 NOT NULL 在 .where 条件之后排序

2024-07-04

我有一个显示最快用户的排名:

@users = User.find.sort { |a, b| b.finished_at <=> a.created_at }

现在我必须添加一些代码以防止由于finished_at beeing而出现错误nil直到用户完成。

@users = User.find(:all, :conditions => "finished_at IS NOT NULL").sort { |a, b| b.finished_at <=> a.created_at }

But sort不起作用。这种链接方法的方式有缺陷吗?并且是find(:all, :conditions => "finished_at IS NOT NULL")Rails 3 方式还是过时了?

提前致谢


Rails 3 查询的方法是:

@users = User.where('finished_at IS NOT NULL') 

至于排序,是的,这样链接就可以了。简单的排序(全部在单个字段上)在 sql 中会更好:

@users = User.where('finished_at IS NOT NULL').order(:finished_at)

然而,您的排序会做一些奇怪的事情,比较左侧的一个字段和右侧的另一个字段。我认为您的排序算法不会正常工作,因为它将取决于初始记录顺序。由于您正在比较苹果和橙子,因此它不会保持一致。

你说“最快的用户”,这让我觉得你真的想要created_at和finished_at时间之间的时间差:

@users = User.where('finished_at IS NOT NULL').
              sort {|a,b| (a.finished_at - a.created_at) <=> (b.finished_at - b.created_at)

然而,如果你想让 Rails 3 延迟加载,你必须在 sql 中排序,而不是在 ruby​​ 中排序。我认为这应该在 mysql 中工作:

@users = User.where('finished_at IS NOT NULL').
              select('users.*, timediff(finished_at,created_at) AS duration').
              order('duration')

这样,在实际调用值之前不会执行查询,这在需要页面缓存时会有所帮助。您还可以享受可用持续时间的好处:

@users[0].duration
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 3 使用 NOT NULL 在 .where 条件之后排序 的相关文章

随机推荐

  • Blazor - 重定向到一个解决方案中另一个项目中的页面

    我遇到了这样的情况 在一个解决方案中 想要将用户从一个项目的页面重定向到另一个项目的页面 这很重要 我在 blazor 服务器上做 任何人都可以教我一些东西吗 您始终可以注入 NavigationManager 通过此您可以将用户重定向到另
  • 来自 Abaqus/CAE 的 Python 多处理

    I am using a commercial application called Abaqus CAE1 with a built in Python 2 6 interpreter and API I ve developed a l
  • 使用 PowerShell 中的“备份”上下文创建卷影副本

    我正在编写一个 PowerShell 脚本 用于使用 rsync 备份 Windows 计算机 为此 我尝试使用所述脚本中的 WMI 创建一个有编写者参与的非持久卷影副本 显然建议备份 我从另一个问题中得知 从 Powershell 访问卷
  • 过滤(减少)NumPy 数组

    假设我有一个 NumPy 数组arr我想根据 可广播 函数的真值进行逐元素过滤 减少 例如 我只想获取低于某个阈值的值k def cond x return x lt k 有几种方法 例如 使用发电机 np fromiter x for x
  • 如何使信号客户端避免表单身份验证?

    我的 MVC 网站在 web config 中有表单授权 现在所有的页面都需要通过授权才能被查看 但是现在我有一个控制台程序 C 控制台程序 这个程序需要发送一些消息到 SignalR 集线器 但是我的 signalR Hub 在我的 MV
  • 使用相同的 URL 哈希刷新 BackboneJS? [复制]

    这个问题在这里已经有答案了 我当前的主干应用程序有一个 url localhost users 有没有办法访问localhost users当位于 URL 时localhost users所以它会刷新页面 目前 当我在localhost u
  • 使用关联类实现双向、多对多关联的流畅 NHibernate 映射

    我在 EntityA 和 EntityB 之间有一个双向多对多关联 并且我使用关联类 EntityABLink 对此进行建模 因为我需要跟踪有关该关系的其他属性 此外 我还有另一个类 它保存对 EntityA 和 EntityB 之间特定关
  • 不固定高度的滚动div

    我需要构建一个动态调整大小的滚动 div div 应动态调整大小以适应屏幕 但如果内容不适合屏幕 它应该显示一个滚动条 因此浏览器自己的滚动条永远不需要激活 我可以通过在 div 中放置另一个 div 并使用来让滚动条出现在 div 中ov
  • 如何获取对象类型

    在我的 Google Apps 脚本应用程序中 我看到以下错误 脚本已完成 但返回值不是受支持的返回类型 如何找出我返回的值的类型 我试过 typeof obj 但我得到的只是它是一个对象 仅当缓存为空并且从电子表格加载数据时才会发生此错误
  • React-native 应用程序在真实的 Android 设备上崩溃

    我正在使用react native 目前开始使用redux并创建了一个应用程序 但是当我在模拟器上运行该应用程序时 它工作正常 然后我通过 USB 将我的手机与 android 6 连接 它也可以工作 但在 Android 8 的其他设备中
  • 如何通过参数包传递引用?

    我有以下代码 include
  • iOS 版本的 Fragment

    谁能告诉我在 Xcode iPhone 中执行以下操作的最佳方法是什么 我有一个主导航屏幕 上面有一些按钮 当用户单击任何按钮时 他们将进入带有更多选项按钮的子导航屏幕 在这里 他们单击任意按钮 就会看到选项列表 单击任何列表选项都会向用户
  • 如何在R函数中使用switch语句?

    我想在 R 中的函数中使用以下语句switch 根据函数参数的值触发不同的计算 例如 在 Matlab 中 您可以通过编写来做到这一点 switch AA case 1 case 2 case 3 end 我找到了这个帖子 switch 语
  • Node Sass 缺少多个节点版本的绑定

    我正在使用 nvm 在节点版本之间切换 我的package json scripts dev rm rf public assets hot update js NODE ENV development webpack env dev pr
  • 在 JavaScript 中将数字转换为字符串,而不从数字中添加尾随零

    我尝试使用 toString 在 JavaScript 中将数字转换为字符串 但它会截断数字中无关紧要的零 举些例子 var n1 250 00 var n2 599 0 var n3 056 0 n1 toString yields 25
  • Laravel 使用 mysql 索引

    我有这个糟糕的代码 抱歉 它使用了太多 MySQL 查询 抱歉它太长了 return view dashboard homepage array DriversNumberApproved gt App Models Drivers whe
  • GWT UiBinder 不加载样式表

    我想使用 UiBinder 制作一个 GWT 小部件 所以我做了 UserPanel ui xml 像这样
  • IF 语句中间的 GO 命令

    我正在寻找有关创建表的信息 仅当它们在当前数据库中不存在时 以便能够在可能或可能没有它们的不同数据库中创建它 并发现这两个有用的主题 SQL Server 检查表是否存在 https stackoverflow com questions
  • 无法在 Debian lenny 上安装 python 模块“pycrypto”

    我尝试通过下载源代码并执行以下命令来安装 pycrypto 模块python setup py install 然后出现错误 running install running build running build py running bu
  • Rails 3 使用 NOT NULL 在 .where 条件之后排序

    我有一个显示最快用户的排名 users User find sort a b b finished at lt gt a created at 现在我必须添加一些代码以防止由于finished at beeing而出现错误nil直到用户完成