【发布时间】: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