Acts_as_list是'最后一个?'方法不按预期工作或我犯了错误?

时间:2010-12-21 23:12:10

标签: ruby-on-rails ruby acts-as-list

所以我在当前的rails项目中使用acts_as_list。我遇到了以下奇怪的行为:

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

然而,当我打电话给最后?在列表中的“最后”项(例如,位置编号最高的项)上,它返回false。实际上,列表中的每个项目都会返回false?方法。我突然间似乎失去了我的最后一次?项目!

这里出了什么问题?

亲切的问候, 欧文

1 个答案:

答案 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,看它是否为非零。在从列表中删除对象之前和之后执行此操作。