Forum: Italian Ruby user group conversioni before_save

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
david (Guest)
on 2007-01-17 16:42
(Received via mailing list)
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?
   :-/
Paolo D. (Guest)
on 2007-01-17 16:46
(Received via mailing list)
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

Paolo

On 1/17/07, david <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
>
>
>


--
Paolo D.'
SeeSaw | Another point of view
http://www.seesaw.it
removed_email_address@domain.invalid
personal http://paolodona.blogspot.com
Massimo (Guest)
on 2007-01-17 17:17
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?
>    :-/
Matteo V. (Guest)
on 2007-01-17 17:34
(Received via mailing list)
On 1/17/07, david <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
david (Guest)
on 2007-01-17 18:30
(Received via mailing list)
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


--
"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
   2. http://lists.ruby-it.org/mailman/listinfo/ml
This topic is locked and can not be replied to.