Fix bugs for shift_to and change items.rake for the missing position in db
This commit is contained in:
parent
6a443f0976
commit
17b486f9e9
|
@ -17,6 +17,8 @@ class Admin::ItemsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_position
|
def update_position
|
||||||
|
item = Item.find(params[:id])
|
||||||
|
item.shift_to(params[:parent_id], params[:position])
|
||||||
render :nothing => true
|
render :nothing => true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -36,12 +36,29 @@ class Item
|
||||||
a
|
a
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def shift_to(new_parent, position)
|
||||||
|
unless self.parent_id.to_s.eql?(new_parent) && self.position.eql?(position.to_i)
|
||||||
|
new_parent = Item.find(new_parent)
|
||||||
|
current_position_sibling = find_by_parent_and_position(new_parent, position.to_i)
|
||||||
|
if current_position_sibling
|
||||||
|
current_position_sibling.at_bottom? ? move_below(current_position_sibling) : move_above(current_position_sibling)
|
||||||
|
elsif self.parent != new_parent
|
||||||
|
self.parent = new_parent
|
||||||
|
save!
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def rebuild_path
|
def rebuild_path
|
||||||
self.path = (self.ancestors_and_self - [Item.root]).collect{|x| x.name unless x.root?}.join('/')
|
self.path = (self.ancestors_and_self - [Item.root]).collect{|x| x.name unless x.root?}.join('/')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def find_by_parent_and_position(parent, position)
|
||||||
|
parent.children.detect{|child| child.position == position}
|
||||||
|
end
|
||||||
|
|
||||||
# Enable the validation for parent_id
|
# Enable the validation for parent_id
|
||||||
def validates_presence_of_parent_id?
|
def validates_presence_of_parent_id?
|
||||||
true
|
true
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
namespace :items do
|
namespace :items do
|
||||||
task :tree_changes => :environment do
|
task :tree_changes => :environment do
|
||||||
Item.all.each do |item|
|
Item.all.each do |item|
|
||||||
item.position -= 1
|
item.position -= item.position > 5 ? 2 : 1
|
||||||
item.parent_ids = ancestors(item)
|
item.parent_ids = ancestors(item)
|
||||||
item.rename(:full_name, :path)
|
item.rename(:full_name, :path)
|
||||||
item.save
|
item.save
|
||||||
|
|
Reference in New Issue