В act_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 объекта, который, как вы полагаете, является последним в списке, чтобы убедиться, что он не ноль. Делайте это до и после удаления объекта из списка.