gpt4 book ai didi

ruby-on-rails - 按 created_at 或 updated_at(以较新的为准)排序 Ruby on Rails

转载 作者:数据小太阳 更新时间:2023-10-29 08:37:30 25 4
gpt4 key购买 nike

我遇到了一个看似简单的问题,但我似乎找不到答案。

我有一组记录:

@mymonkeys = @user.monkeys.all

我需要的是最近与之交互(创建或更新)的 3 只猴子。

我可以这样获取最近创建的猴子:@mymonkeys.sort_by(&:created_at).reverse!.take(3)

最近更新的猴子是这样的:@mymonkeys.sort_by(&:updated_at).reverse!.take(3)

但是是否有一行代码返回最近创建或更新的猴子?

非常感谢!



附言:我看见 this question其中提到了 coalesce 关键字,但我无法确定这是否是我要查找的内容。

最佳答案

您可以(并且可能应该)在数据库中执行此操作,但 COALESCE 不是您要查找的内容。 COALESCE 用于将 NULL 转换为 SQL 中的其他内容,您可以这样说:

coalesce(might_be_null, what_i_want_instead_of_null)

在您的情况下,您应该始终同时拥有 created_atupdated_at,因此您不必担心 NULL。

如果你想选择几个值中的最大值,那么你想使用 GREATEST ;如果你想要最小的,那么使用 LEAST;任何值得用于实际工作的数据库都应该同时支持 GREATEST 和 LEAST,但如有必要,您可以使用 CASE 伪造它。最近的时间戳是 GREATEST,所以你想按 greatest(created_at, update_at) 排序;您还希望最近的三个位于列表的顶部,因此您需要降序排序(即最大的优先);您可以在使用时将 LIMIT 3 发送到数据库中。这给你:

three_recent_monkeys = @user.monkeys.order('greatest(created_at, updated_at) desc').limit(3)

这是 Rails,所以 updated_at 应该至少是 created_at 所以 greatest(created_at, updated_at) 应该总是 updated_at。这意味着您可以简化事情并只说:

three_recent_monkeys = @user.monkeys.order('updated_at desc').limit(3)

关于ruby-on-rails - 按 created_at 或 updated_at(以较新的为准)排序 Ruby on Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27496275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com