这是我的Sinatra代码
def self.sort_by_date_or_price(items, sort_by, sort_direction)
if sort_by == :price
items.sort_by{|x| sort_direction == :asc ? x.item.current_price : -x.item.current_price}
elsif sort_by == :date
items.sort_by{|x| sort_direction == :asc ? x.created_date : -x.created_date}
end
end
当我将此方法称为#sort_by_date_or_price(items, :date, :desc)
时,它会返回错误NoMethodError: undefined method '-@' for 2013-02-05 02:43:48 +0200:Time
我该如何解决这个问题?
答案 0 :(得分:1)
class Person
end
#=> nil
ram = Person.new()
#=> #<Person:0x2103888>
-ram
NoMethodError: undefined method `-@' for #<Person:0x2103888>
from (irb):4
from C:/Ruby200/bin/irb:12:in `<main>'
现在看看我如何修复它:
class Person
def -@
p "-#{self}"
end
end
#=> nil
ram = Person.new()
#=> #<Person:0x1f46628>
-ram
#=>"-#<Person:0x1f46628>"
=> "-#<Person:0x1f46628>"
答案 1 :(得分:1)
问题是unary -
运算符未在created_date
使用的类Time中定义。你应该把它转换成一个整数:
items.sort_by{|x| sort_direction == :asc ? x.created_date.to_i : -x.created_date.to_i}
那也可以写成
items.sort_by{|x| x.created_date.to_i * (sort_direction == :asc ? 1 : -1)}