Ruby排序(整数)"NilClass与3200的比较失败"

Joh*_*ith 11 ruby sorting ruby-on-rails

我想在rails应用程序中对记录进行排序:

@ebms = Ebm.all
@ebms.sort_by! {|u| u.number}
Run Code Online (Sandbox Code Playgroud)

u.number被定义为整数!问题是Rails无法与它进行比较nil:

comparison of NilClass with 32400 failed
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能逃避这个错误?

Mat*_*att 16

您可以number为nil 时将使用的比较添加默认值:

@ebms = Ebm.all
@ebms.sort_by! {|u| u.number || 0}
Run Code Online (Sandbox Code Playgroud)

或者您可以按照此答案中的建议选择带有数字的那些并对其进行排序,然后将没有数字的那些添加到列表中.

  • @ toro2k在这种情况下,如果OP希望首先对nil个案进行排序,那么默认值应该是`-Float :: INFINITY`. (2认同)

小智 13

如何尝试将nil转换为整数?

   @ebms = Ebm.all
   @ebms.sort_by! { |u| u.number.to_i }
Run Code Online (Sandbox Code Playgroud)

  • 这是有道理的,但与Matt的答案没有太大的不同,后者是早些时候的.不过,这是一种稍微好一点的写作方式. (2认同)