0

这是我的 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

我该如何解决?

4

2 回答 2

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>"
于 2013-03-17T13:41:26.363 回答
1

问题是unary -运算符 in 未在Time使用的类中定义created_date。您应该将其转换为整数:

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)}
于 2013-03-17T14:03:31.267 回答