# -*- encoding : utf-8 -*- class TableRow < ActiveRecord::Base has_many :cel_tables, -> {order("position")} belongs_to :table_content attr_accessor :skip_before_update before_create do if !position self.position = 1 end if position TableRow.find(:all, :conditions => ["position >= ? and table_content_id = ?",self.position,self.table_content_id]).each do |table_row| table_row.position = table_row.position + 1 table_row.skip_before_update = true table_row.save! end end end before_update do if !skip_before_update if self.position_changed? #si la position est plus grande que l'ancienne if self.changes['position'][1] > self.changes['position'][0] TableRow.find(:all, :conditions => ["position > ? and position <= ? and table_content_id = ?",self.changes['position'][0],self.changes['position'][1],self.table_content_id]).each do |table_row| table_row.position = table_row.position - 1 table_row.skip_before_update = true table_row.save! end end #si la position est plus petite que l'ancienne. if self.changes['position'][1] < self.changes['position'][0] TableRow.find(:all, :conditions => ["position >= ? and position < ? and table_content_id = ?",self.changes['position'][1],self.changes['position'][0],self.table_content_id]).each do |table_row| table_row.position = table_row.position + 1 table_row.skip_before_update = true table_row.save! end end end end end before_destroy do TableRow.find(:all, :conditions => ["position > ? and table_content_id = ?",self.position,self.table_content_id]).each do |table_row| table_row.position = table_row.position - 1 table_row.skip_before_update = true table_row.save! end table = self.table_content table_past_count = table.nbr_rows table.nbr_rows = table_past_count - 1 table.save end end