简体   繁体   中英

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

Question I have a custom divide and conquer array sorter that I would like to use. This all works well until I try to use it on an array in my controller I get this message.. NoMethodError (undefined method '<=' for #<Entry:0x0000000ac7d850>) : Any help would be greatly appreciated thank you!

here is my Entry model with the mergesort method I am calling in my controller.

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

Here is my Entry controller where I am trying to call it.

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


    @ent = Entry.mergesort(@ent_sort)

  end 

You probably have a nil for the first element of either left or right .

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>'

You can fix the error by casting the nil to a different value. For example, if the values you are comparing are always integers you can change the following line:

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

to this:

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

But think about how it will affect your functionality... it may break something if it isn't what you actually want to do.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM