2011-07-05 4 views
0

I ont les extraits de code suivants:données Rails ne sont pas enregistrées

oldroompaxinfo = Roompaxinfo.find(:all, :conditions =>["bkgitem_id = ?",bkgitemid]) 

.... some code to identify which passenger ids have changed 

roompaxinfo = Roompaxinfo.find(:first, :conditions => ["bkgitem_id = ? and roomno = ? and pax_id = ?", bkgitemid, roomno, oldpaxid]) 

roompaxinfo.pax_id = newpaxid 
roompaxinfo.save 

..... some code to send the changes to a remote service. 

#If errors occur during send I want to re-instate the old info 
if retcode.index('Error') != nil 
    oldroompaxinfo.each do |rp| 
     rp.save 
    end 
end 

Et le problème est que ce dernier morceau de code ne sauve pas les anciennes données en arrière. Dans le cas où quelqu'un pense qu'il n'est pas exécuté à cause du contrôle de condition, alors j'ai déjà prouvé qu'il le fait en produisant des choses en flash. J'ai aussi essayé rp.save! mais cela n'a pas aidé non plus.

J'utilise MySQL avec Ruby 1.8 et Rails 2.3.8

+1

Que dit le development.log? Montre-t-il les requêtes SQL en cours d'exécution? – Dogbert

+0

@Dogbert le journal ne montre aucune tentative d'enregistrement. La réponse de Dylan était la raison. Merci pour votre contribution. – nexar

Répondre

1

Lorsque vous frappez votre boucle, Rails ne pense pas que rp est « sale », faisant une sauvegarde ne touche pas la base de données . Rails émettra uniquement une instruction update s'il existe des attributs modifiés.

Vous devrez peut-être enregistrer les anciens paramètres que vous voulez (juste pax_id?), Recharger le rp enregistrement, puis essayez d'enregistrer:

oldroompaxinfo.each do |rp| 
    pax_id = rp.pax_id 
    rp.reload 
    rp.update_attributes(:pax_id => pax_id) 
end 
+0

Merci pour votre réponse et cela fonctionne. Cependant, quelqu'un sur un autre forum a suggéré que je mets le tout dans le cadre d'une transaction et que je revienne en arrière si la soumission au service échoue, ce qui semble être une façon plus logique de le faire. – nexar

Questions connexes