2010-09-30 7 views
0

J'ai une table Pages dans ma base de données avec un champ appelé position.Rails augmenter la valeur db par un

Comment puis-je augmenter cette valeur de un avant de l'enregistrer?

Encore mieux comment puis-je supprimer les positions inutilisées et donner au nouvel enregistrement le bon numéro de position?

Répondre

1

Vous avez besoin d'un rappel before_save:

Dans votre modèle:

before_save :increase_position 

def increase_position 
    self.position += 1 
end 

Vous pouvez ajouter tout type de logique à la méthode increase_position pour éliminer les positions inutilisées.

+0

Comment cette logique pourrait-elle ressembler? – andkjaer

+0

Eh bien, je ne peux pas deviner ce que vous essayez de faire avec les quelques infos que vous nous avez données ... Essayez de mettre à jour votre question et d'afficher le code de votre modèle (au moins). – Yannis

+0

lorsque cette méthode sera appelée – praveenkumar

0

Vous devez utiliser le plugin acs_as_list ou configurer des filtres avant et après.

before_create :set_position 
after_destroy :fix_positions 

def set_position 
    self.position = Page.count + 1 
end 

def fix_positions 
    Page.order('position asc').all.each_with_index do |page, index| 
    page.update_attribute(:position, index + 1) unless page.position == index + 1 
    end 
end 
Questions connexes