【发布时间】:2013-06-06 22:46:50
【问题描述】:
所以我有一堆用户,他们都有 user.dj_name 属性。这是模型上经过验证的必要性,但我在这里仍然很谨慎,因为我遇到了问题。
我想获得一群用户,然后按他们的 dj_name 排序。像这样的:
@djs = Event.all.map { |e| e.program.user }.sort_by {|x,y| x.dj_name <=> y.dj_name }
它吸引了所有举办活动(节目)的 DJ。它失败并显示“NoMethodError: undefined method `dj_name' for nil:NilClass”
所以我尝试了:
@djs = Event.all.map { |e| e.program.user }
@djs.compact.sort_by! {|x,y| x.dj_name <=> y.dj_name rescue nil}
而且它没有排序。如果没有“rescue nil”子句,我会得到同样的错误。
如果我拒绝!如果对象为零,我什么也得不到。
> @djs.reject! {|d| d.nil? }
=> nil
似乎数组中没有一个对象是 nil,排序机制给了我错误,拯救它只是停止排序过程并返回一个未更改的数组。
暂停?
【问题讨论】:
-
你不应该使用内联
rescue和compact无论如何都会删除 nil 元素。 -
您的错误
NoMethodError for nil object告诉您您尝试排序的对象是空的,因此在执行此错误时会抛出此错误。 -
这让我发疯了。我没有向下滚动查看最后一个答案,这是正确的,也是我正在做的。我认为您应该接受这一点,因为它实际上解决了问题。
标签: ruby-on-rails ruby arrays sorting null