为什么我的 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
对于 left
或 right
的第一个元素,您可能有一个 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
但想想它会如何影响您的功能...如果它不是您真正想要做的,它可能会破坏某些东西。
问题我有一个自定义的分而治之数组排序器,我想使用它。这一切都很好,直到我尝试在我的控制器中的数组上使用它,我收到这条消息。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
对于 left
或 right
的第一个元素,您可能有一个 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
但想想它会如何影响您的功能...如果它不是您真正想要做的,它可能会破坏某些东西。