Ruby on rails Is作为列表';s';最后?';方法未按预期工作,还是我犯了错误?

Ruby on rails Is作为列表';s';最后?';方法未按预期工作,还是我犯了错误?,ruby-on-rails,ruby,acts-as-list,Ruby On Rails,Ruby,Acts As List,因此,我在当前的rails项目中使用acts_作为_列表。我遇到了以下奇怪的行为: 当我从列表中删除一个项目(item.remove_from_list)时,它会正确地将该项目的position列设置为nil,并更新其他列表项目的position值 但是,我最后一次打电话是什么时候?对于列表中的“最后”项(例如,位置编号最高的项),它返回false。事实上,列表中的每一项都将返回false,直到最后一项?方法。我突然似乎失去了我的最后?物品 这里怎么了 亲切问候,, Erwin在acts\u a

因此,我在当前的rails项目中使用acts_作为_列表。我遇到了以下奇怪的行为:

当我从列表中删除一个项目(item.remove_from_list)时,它会正确地将该项目的position列设置为nil,并更新其他列表项目的position值

但是,我最后一次打电话是什么时候?对于列表中的“最后”项(例如,位置编号最高的项),它返回false。事实上,列表中的每一项都将返回false,直到最后一项?方法。我突然似乎失去了我的最后?物品

这里怎么了

亲切问候,,
Erwin

在acts\u as\u列表中,将
last?
方法添加到每个ActiveRecord实例中:

# Return +true+ if this object is the last in the list.
def last?
  return false unless in_list?
  self.send(position_column) == bottom_position_in_list
end
首先,它检查对象是否在列表中。方法如下:

# Test if this record is in a list
def in_list?
  !send(position_column).nil?
end

因此,我将检查您认为是列表中最后一个对象的position_列,看看它是否为非nil。在从列表中删除对象之前和之后执行此操作

我理解这一点,并检查了代码。但是它并没有像预期的那样工作:我有3个位置为1、2和nil的对象。第三个对象通过调用remove\u from\u list将其位置列恢复为nil。当我最后一次调用时,我希望第二个对象返回true?在上面。但是,它返回false。最后?在所有三个对象上返回false。是,最后一个?返回false。那是你的问题。下一步是深入代码以找出原因。你的清单上有什么?返回?列表中底部位置的值是多少?我回到代码中发现了一个错误。谢谢你的帮助,马克