# Update\_attributes multipli

**URL:** <https://www.ruby-forum.com/t/update-attributes-multipli/117420>\
**Category:** IT\
**Created:** [October 16, 2007, 6:49pm UTC](https://www.ruby-forum.com/t/update-attributes-multipli/117420 "2007-10-16T18:49:43Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![tuland](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/6f9a4e/32.png) [@tuland](https://www.ruby-forum.com/u/tuland)\
**Post date:** [October 16, 2007, 6:49pm UTC](https://www.ruby-forum.com/t/update-attributes-multipli/117420/1 "2007-10-16T18:49:43Z")

</div>

Innanzi vi faccio i complimenti per il servizio; sono un nuovo utente.

Vi espongo il mio problema.

Ho due tabelle “background” e “textfont” entrambi in relazione 1…1 con  
“blog”. Nel tentativo ti aggiornare “blog.background” e “blog.textfont”  
ho provato questo codice:

# soluzione A

blog.background.attributes = params[:background]  
blog.textfont.attributes = params[:textfont]  
if blog.save  
…  
end

…e , per rendere l’idea, vorrei ottenere qualcosa di simile a:

# soluzione B - funzionante

if blog.background.update\_attributes(params[:background]) &&  
blog.textfont.update\_attributes(params[:textfont])  
…  
end

Il salvataggio viene eseguito senza errori, ma il db rimane inalterato.  
Vorrei perÃ² adottare la soluzione A (o qualcosa di analogo) perchÃ©  
preferisco la protezione di una transazione unica: non voglio salvare il  
background se poi textfont mi crea problemi.

Vi ringrazio anticipatamente

---

<div class="post-metadata">

**Author:** ![tuland](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/6f9a4e/32.png) [@tuland](https://www.ruby-forum.com/u/tuland)\
**Post date:** [October 16, 2007, 8:47pm UTC](https://www.ruby-forum.com/t/update-attributes-multipli/117420/2 "2007-10-16T20:47:11Z")

</div>

Non sono sicuro di aver capito appieno, ma forse questo funziona?

Blog.transaction do  
blog.background.update\_attributes!(params[:background])  
blog.textfont.update\_attributes!(params[:textfont])  
end

Io uso la version “!” di update\_attributes per poter catturare  
exception, ma fai come preferisci; rammenta solo che la transazione va  
in ROLLBACK solo se avviene un exception là in mezzo, quindi se vuoi usare  
l’update\_attributes normale devi fare un raise da qualche parte.

---

<div class="post-metadata">

**Author:** ![tuland](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/6f9a4e/32.png) [@tuland](https://www.ruby-forum.com/u/tuland)\
**Post date:** [October 17, 2007, 9:21am UTC](https://www.ruby-forum.com/t/update-attributes-multipli/117420/3 "2007-10-17T09:21:13Z")

</div>

Una volta ho fatto un pò di esperimenti riguardo le transazioni:

> **[Tempest](https://tempestwx.com/station/2007/)**
>
> Tempest Weather System

Magari ti è utile (rispondo a David perché non ho più il messaggio di  
Pippo).
