All the methods available to a record that has had
acts_as_list
specified. Each method works by assuming the
object to be the item in the list, so chapter.move_lower
would
move that chapter lower in the list of all chapters. Likewise,
chapter.first?
would return true
if that chapter
is the first in the list of all chapters.
Decrease the position of this item without adjusting the rest of the list.
# File lib/acts_as_list/active_record/acts/list.rb, line 148 def decrement_position return unless in_list? update_attribute position_column, self.send(position_column).to_i - 1 end
Return true
if this object is the first in the list.
# File lib/acts_as_list/active_record/acts/list.rb, line 154 def first? return false unless in_list? self.send(position_column) == acts_as_list_top end
Return the next higher item in the list.
# File lib/acts_as_list/active_record/acts/list.rb, line 166 def higher_item return nil unless in_list? acts_as_list_class.find(:first, :conditions => "#{scope_condition} AND #{position_column} = #{(send(position_column).to_i - 1).to_s}" ) end
Test if this record is in a list
# File lib/acts_as_list/active_record/acts/list.rb, line 182 def in_list? !send(position_column).nil? end
Increase the position of this item without adjusting the rest of the list.
# File lib/acts_as_list/active_record/acts/list.rb, line 142 def increment_position return unless in_list? update_attribute position_column, self.send(position_column).to_i + 1 end
Insert the item at the given position (defaults to the top position of 1).
# File lib/acts_as_list/active_record/acts/list.rb, line 89 def insert_at(position = acts_as_list_top) insert_at_position(position) end
Return true
if this object is the last in the list.
# File lib/acts_as_list/active_record/acts/list.rb, line 160 def last? return false unless in_list? self.send(position_column) == bottom_position_in_list end
Return the next lower item in the list.
# File lib/acts_as_list/active_record/acts/list.rb, line 174 def lower_item return nil unless in_list? acts_as_list_class.find(:first, :conditions => "#{scope_condition} AND #{position_column} = #{(send(position_column).to_i + 1).to_s}" ) end
Swap positions with the next higher item, if one exists.
# File lib/acts_as_list/active_record/acts/list.rb, line 104 def move_higher return unless higher_item acts_as_list_class.transaction do higher_item.increment_position decrement_position end end
Swap positions with the next lower item, if one exists.
# File lib/acts_as_list/active_record/acts/list.rb, line 94 def move_lower return unless lower_item acts_as_list_class.transaction do lower_item.decrement_position increment_position end end
Move to the bottom of the list. If the item is already in the list, the items below it have their position adjusted accordingly.
# File lib/acts_as_list/active_record/acts/list.rb, line 115 def move_to_bottom return unless in_list? acts_as_list_class.transaction do decrement_positions_on_lower_items assume_bottom_position end end
Move to the top of the list. If the item is already in the list, the items above it have their position adjusted accordingly.
# File lib/acts_as_list/active_record/acts/list.rb, line 125 def move_to_top return unless in_list? acts_as_list_class.transaction do increment_positions_on_higher_items assume_top_position end end
Removes the item from the list.
# File lib/acts_as_list/active_record/acts/list.rb, line 134 def remove_from_list if in_list? decrement_positions_on_lower_items update_attribute position_column, nil end end