Update_attributes multipli

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

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.

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

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