Skip to content

Commit

Permalink
Merge pull request brendon#18 from aepstein/master
Browse files Browse the repository at this point in the history
Should decrement lower items after the item has been destroyed to avoid unique key conflicts.
  • Loading branch information
swanandp committed Nov 2, 2011
2 parents ec97d51 + a8ef871 commit 8cfd777
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions lib/acts_as_list/active_record/acts/list.rb
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ def position_column
#{scope_condition_method}
before_destroy :decrement_positions_on_lower_items
after_destroy :decrement_positions_on_lower_items
before_create :add_to_list_bottom
EOV
end
Expand Down Expand Up @@ -243,10 +243,11 @@ def decrement_positions_on_higher_items(position)
end

# This has the effect of moving all the lower items up one.
def decrement_positions_on_lower_items
def decrement_positions_on_lower_items(position=nil)
return unless in_list?
position ||= send(position_column).to_i
acts_as_list_class.update_all(
"#{position_column} = (#{position_column} - 1)", "#{scope_condition} AND #{position_column} > #{send(position_column).to_i}"
"#{position_column} = (#{position_column} - 1)", "#{scope_condition} AND #{position_column} > #{position}"
)
end

Expand Down Expand Up @@ -281,8 +282,9 @@ def insert_at_position(position)
# used by insert_at_position instead of remove_from_list, as postgresql raises error if position_column has non-null constraint
def store_at_0
if in_list?
decrement_positions_on_lower_items
old_position = send(position_column).to_i
update_attribute(position_column, 0)
decrement_positions_on_lower_items(old_position)
end
end
end
Expand Down

0 comments on commit 8cfd777

Please sign in to comment.