为什么我的 ROR 应用程序中出现未定义的方法“<=”

Why am I getting an undefined method '<=' for in my ROR app

问题我有一个自定义的分而治之数组排序器,我想使用它。这一切都很好,直到我尝试在我的控制器中的数组上使用它,我收到这条消息。NoMethodError (undefined method '<=' for #<Entry:0x0000000ac7d850>):任何帮助将不胜感激,谢谢!

这是我的 Entry 模型,其中包含我在控制器中调用的合并排序方法。

def self.mergesort(container)
  return container if (container.size <= 1)
  mid   = container.size / 2
  left  = container[0...mid]
  right = container[mid...container.size]
  merge(mergesort(left), mergesort(right))
end

def self.merge(left, right)
  sorted = []
  until left.empty? or right.empty?
    (left.first <= right.first) ? sorted << left.shift : sorted << right.shift
  end
  sorted + left + right
end

这是我尝试调用的入口控制器。

  def pending_sort 
    @ent_sort = Entry.where("section = ? and approve_disapprove = ?", @mgr_section, '3')


    @ent = Entry.mergesort(@ent_sort)

  end 

对于 leftright 的第一个元素,您可能有一个 nil

irb(main):001:0> left = []
  => []
irb(main):002:0> right = [1]
  => [1]
irb(main):003:0> left.first
  => nil
irb(main):004:0> left.first <= right.first
  NoMethodError: undefined method `<=' for nil:NilClass
  from (irb):4
  from /usr/bin/irb:11:in `<main>'

您可以通过将 nil 转换为不同的值来修复错误。例如,如果您要比较的值始终是整数,您可以更改以下行:

(left.first <= right.first) ? sorted << left.shift : sorted << right.shift

对此:

(left.first.to_i <= right.first.to_i) ? sorted << left.shift : sorted << right.shift

但想想它会如何影响您的功能...如果它不是您真正想要做的,它可能会破坏某些东西。