【问题标题】:Rails, how to .sort with conditional logic?Rails,如何使用条件逻辑进行排序?
【发布时间】:2020-07-08 06:28:50
【问题描述】:

我有一个问题我至今无法解决,因为 .sort_by 在 Rails 5.1 中正在贬值我需要将我当前项目中的任何这些方法更改为 .sort 我仍在学习 Rails 所以如果这是一个简单的解决方案,我表示歉意。

我的用例是:
items = items.sort_by{ |a, b| [a.updated_at > current_user.news_seen_at ? 0 : 1, now - a.updated_at] }

我相信我理解这目前是按 [0, some time] 或 [1, some time] 的数组排序的。 我的问题是,我该如何重写它以使用.sort?是否可以包含已经存在的条件逻辑,或者是否需要在sort 之前完成以允许简单的.sort{ |a,b| a <=> b}
任何建议、指导和/或想法将不胜感激。

【问题讨论】:

  • 你能告诉items是哪个类sort_by被弃用了吗?如果这是一个普通数组sort_by 可以正常工作的地方。 items.class 回馈什么?
  • @3limin4t0r items 是一个在 news 控制器的索引中初始化的数组。这些项目是用户通知提要页面中的通知/新闻项目。感谢您提供可能的解决方案,但是我需要删除 sort_by 并使用其他方法。
  • 如果您需要删除 sort_by 调用,这意味着您没有使用数组。由于sort_by 在最新的 Ruby 2.7 中仍然存在并且运行良好。我相信您认为您正在使用数组,但实际上它是不同的。 items.class 回馈Array 了吗?
  • @3limin4t0r 嗯,也许我还有很多东西要学! def index items = [] items = items + BlogPost.where items = items + Friendship.left_joins ... 等等。这就是它在控制器中的定义方式。做 items.class 返回错误,undefined local variable or method
  • 您看到 sort_by 被弃用的来源是什么?

标签: ruby-on-rails ruby sorting conditional-statements


【解决方案1】:

是的,您可以将块传递给sort
https://apidock.com/ruby/Enumerable/sort

为了清楚起见:sort_by 是一种 Ruby 方法,并且在最新版本中仍然存在。
特定的 Rails 版本不会弃用 Ruby 上的某些内容。

这是sort_by 的文档:https://apidock.com/ruby/Enumerable/sort_by

【讨论】:

    猜你喜欢
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    相关资源
    最近更新 更多