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