# Conversioni before\_save

**URL:** <https://www.ruby-forum.com/t/conversioni-before-save/82109>\
**Category:** IT\
**Created:** [January 17, 2007, 3:42pm UTC](https://www.ruby-forum.com/t/conversioni-before-save/82109 "2007-01-17T15:42:52Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [January 17, 2007, 3:42pm UTC](https://www.ruby-forum.com/t/conversioni-before-save/82109/1 "2007-01-17T15:42:52Z")

</div>

Ciao,  
ho un campo in un form che corrisponde ad un campo integer nel DB; il  
campo esprime una durata, in secondi. Di conseguenza, quando faccio:  
@bagaglio = Bagaglio.new params[:bagaglio]  
…la stringa POSTata dal form (perchÃ© in origine tutti gli input  
sono  
stringhe!) viene convertito in Fixnum. Ok.  
Voglio permettere l’inserimento di valori in piÃ¹ formati nel form,  
indicando con una lettera l’unitÃ di misura. “3g” = 3 giorni =  
3_86400  
secondi, “48h” = 48 ore = 48_3600 ecc.  
Ho aggiunto un metodo di conversione al modello. Un po’ di regexp che  
estrae i numeri e fa le moltiplicazioni del caso. Mi sembrava  
naturale  
chiamare questo metodo dal before\_save hook, ma ecco il mio problema:  
quando viene invocato il valore originale del form, ad esempio “3g”,  
Ã¨  
giÃ stato convertito in Fixnum, cioÃ¨ 3 nel esempio…  
Come faccio a eseguire codice direttamente sui dati POSTati? Potrei  
farlo nel controller, prima di fare Bagaglio.new(), ma Ã¨ una  
conversione che andrebbe nel model mica nel controller e lo voglio  
avere in un solo posto, prima di create/update, ovvero proprio nel  
“before\_save” o al limite nel “before\_validate”.  
Idee?  
:-/

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [January 17, 2007, 3:46pm UTC](https://www.ruby-forum.com/t/conversioni-before-save/82109/2 "2007-01-17T15:46:53Z")

</div>

a suo tempo feci un plugin che salvava i dati moltiplicati per  
10,100,1000  
su db,  
non mi ricordo esattamente dove mi agganciavo, cmq puoi spulciare i  
sorgenti, magari ti sono d’aiuto…  
[http://svn.seesaw.it/pkgs/store\_multiplied.tar.gz](http://svn.seesaw.it/pkgs/store_multiplied.tar.gz)

Paolo

On 1/17/07, david [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> secondi, “48h” = 48 ore = 48\*3600 ecc.  
> :-/  
> removed\_email\_address@domain.invalid  
> [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

–  
Paolo D.’  
SeeSaw | Another point of view

> **[A Padova il buon software chi lo fa?](https://seesaw.it/)**
>
> A creare software sono tantissimi, a farlo molto bene c’è una certa schiera di sviluppatori, ma a costruirlo un pezzo alla volta insieme al cliente, plasmarlo sulle sue esigenze e renderlo parte di un nuovo approccio al mondo del lavoro sono davvero...

removed\_email\_address@domain.invalid  
personal [http://paolodona.blogspot.com](http://paolodona.blogspot.com)

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [January 17, 2007, 4:17pm UTC](https://www.ruby-forum.com/t/conversioni-before-save/82109/3 "2007-01-17T16:17:02Z")

</div>

Io definirei un nuovo attributo nel modello (es formula\_durata), da  
utilizzare poi nel form, al posto di quello originale.

class Model  
def formula\_durata=(value)  
self.durata\_in\_giorni=tua\_formula(value)  
end

def formula\_durata  
durata\_in\_giorni  
end  
end

Ciao  
Massimo

david wrote:

> Ciao,  
> ho un campo in un form che corrisponde ad un campo integer nel DB; il  
> campo esprime una durata, in secondi. Di conseguenza, quando faccio:  
> @bagaglio = Bagaglio.new params[:bagaglio]  
> …la stringa POSTata dal form (perchÃ© in origine tutti gli input  
> sono  
> stringhe!) viene convertito in Fixnum. Ok.  
> Voglio permettere l’inserimento di valori in piÃ¹ formati nel form,  
> indicando con una lettera l’unitÃ di misura. “3g” = 3 giorni =  
> 3_86400  
> secondi, “48h” = 48 ore = 48_3600 ecc.  
> Ho aggiunto un metodo di conversione al modello. Un po’ di regexp che  
> estrae i numeri e fa le moltiplicazioni del caso. Mi sembrava  
> naturale  
> chiamare questo metodo dal before\_save hook, ma ecco il mio problema:  
> quando viene invocato il valore originale del form, ad esempio “3g”,  
> Ã¨  
> giÃ stato convertito in Fixnum, cioÃ¨ 3 nel esempio…  
> Come faccio a eseguire codice direttamente sui dati POSTati? Potrei  
> farlo nel controller, prima di fare Bagaglio.new(), ma Ã¨ una  
> conversione che andrebbe nel model mica nel controller e lo voglio  
> avere in un solo posto, prima di create/update, ovvero proprio nel  
> “before\_save” o al limite nel “before\_validate”.  
> Idee?  
> :-/

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [January 17, 2007, 4:34pm UTC](https://www.ruby-forum.com/t/conversioni-before-save/82109/4 "2007-01-17T16:34:07Z")

</div>

On 1/17/07, david [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Ho aggiunto un metodo di conversione al modello. Un po’ di regexp che  
> estrae i numeri e fa le moltiplicazioni del caso. Mi sembrava naturale  
> chiamare questo metodo dal before\_save hook, ma ecco il mio problema:  
> quando viene invocato il valore originale del form, ad esempio “3g”, è  
> già stato convertito in Fixnum, cioè 3 nel esempio…

Prova qualcosa tipo

def before\_save  
duration = convert\_from\_funny\_formats(duration\_before\_type\_cast)  
end

dove convert\_from\_funny\_formats è il tuo metodo

Matteo

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [January 17, 2007, 5:30pm UTC](https://www.ruby-forum.com/t/conversioni-before-save/82109/5 "2007-01-17T17:30:25Z")

</div>

Massimo: Avevo pensato all’attributo extra infatti, ma mi sembra poco  
elegante, ma Ã¨ forse il meno peggio…  
Matteo: Questo sembra interessante… before\_type\_cast Ã¨ forse quello  
che cercavo!  
david wrote:

Ciao,  
ho un campo in un form che corrisponde ad un campo integer nel DB; il  
campo esprime una durata, in secondi. Di conseguenza, quando faccio:  
@bagaglio = Bagaglio.new params[:bagaglio]  
…la stringa POSTata dal form (perchÃ© in origine tutti gli input  
sono  
stringhe!) viene convertito in Fixnum. Ok.  
Voglio permettere l’inserimento di valori in piÃ¹ formati nel form,  
indicando con una lettera l’unitÃ di misura. “3g” = 3 giorni =  
3_86400  
secondi, “48h” = 48 ore = 48_3600 ecc.  
Ho aggiunto un metodo di conversione al modello. Un po’ di regexp che  
estrae i numeri e fa le moltiplicazioni del caso. Mi sembrava  
naturale  
chiamare questo metodo dal before\_save hook, ma ecco il mio problema:  
quando viene invocato il valore originale del form, ad esempio “3g”,  
Ã¨  
giÃ stato convertito in Fixnum, cioÃ¨ 3 nel esempio…  
Come faccio a eseguire codice direttamente sui dati POSTati? Potrei  
farlo nel controller, prima di fare Bagaglio.new(), ma Ã¨ una  
conversione che andrebbe nel model mica nel controller e lo voglio  
avere in un solo posto, prima di create/update, ovvero proprio nel  
“before\_save” o al limite nel “before\_validate”.  
Idee?  
:-/

```
_______________________________________________________________________

```

* * *

Ml mailing list  
[1]removed\_email\_address@domain.invalid  
[2][http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

–  
“Den som vÃ¤ntar pÃ¥ nÃ¥got gott vÃ¤ntar inte fÃ¶r lÃ¤nge. Den som vÃ¤ntar pÃ¥  
nÃ¥gon so  
m har gÃ¥tt fÃ¥r vÃ¤nta lÃ¤nge. Den som har vÃ¤ntat fÃ¶r gott har vÃ¤ntat fÃ¶r  
lÃ¤nge.”

References

1. [mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
2. [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)
