所以我在我当前的 rails 项目中使用acts_as_list。我遇到了以下奇怪的行为:
当我从列表中删除一个项目(item.remove_from_list)时,它会正确地将此项的位置列设置为nil并更新其他列表项的位置值。
但是,当我最后一次打电话时?在列表中的“最后一个”项目(例如位置编号最高的项目)上,它返回 false。实际上,列表中的每一项都会返回false到最后?方法。我突然好像失去了我的最后一个?物品!
这里出了什么问题?
亲切的问候,欧文
所以我在我当前的 rails 项目中使用acts_as_list。我遇到了以下奇怪的行为:
当我从列表中删除一个项目(item.remove_from_list)时,它会正确地将此项的位置列设置为nil并更新其他列表项的位置值。
但是,当我最后一次打电话时?在列表中的“最后一个”项目(例如位置编号最高的项目)上,它返回 false。实际上,列表中的每一项都会返回false到最后?方法。我突然好像失去了我的最后一个?物品!
这里出了什么问题?
亲切的问候,欧文
在acts_as_list 中,该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_column 是否为非零。在从列表中删除对象之前和之后执行此操作。