【发布时间】:2014-06-18 22:03:10
【问题描述】:
我有一组用户,这些用户可能有也可能没有初创公司。启动对象有一个属性名称。
我想按启动名称对用户数组进行排序。但是当用户对象确实有启动时,我显然会得到一个错误。
在查看了 StackOverflow 上的一些解决方案后,我尝试了以下代码。我正在使用 HAML,这就是为什么没有“end”关键字
- @users.sort do |a, b|
- a.startup.nil? ? -1 : b.startup.nil? ? 1 : a.startup[0].name <=> b. startup[0].name
但我收到以下错误。
undefined method `name' for nil:NilClass
正在尝试
- @users.sort do |a, b|
- a.startup[0].nil? ? -1 : b.startup[0].nil? ? 1 : a.startup[0].name <=> b. startup[0].name
用户数组根本没有排序。
注意:我提到了这篇 SO 帖子 Sorting an array of arrays in Ruby
我也试过了
-@users.sort{|a,b| a.startup[0].name && b.startup[0].name ? a.startup[0].name <=> b.startup[0].name : a.startup[0].name ? -1 : 1 }
本质上是
foo.sort{|a,b| a && b ? a <=> b : a ? -1 : 1 }
来自 SO 条目:sorting a ruby array of objects by an attribute that could be nil
即使这给出了错误
undefined method `name' for nil:NilClass
编辑:当用户没有启动时,我希望将该用户放在数组的末尾。
【问题讨论】:
-
如果用户没有创业公司,那你想怎么排序呢?
-
为了让您走上正确的道路,您可以查看 Ruby 中的评估结果为 nil 的内容。 (或者不那么微妙,当
User#startup返回一个空数组时会发生什么?) -
@Tacoman667 当用户没有启动时,我希望将该用户放在数组的末尾。
标签: ruby-on-rails ruby arrays sorting haml