Forum: Italian Ruby user group Problemi con Symbol: Leggendo il valore mi ritorna --- :simb

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.
74ba9c207c0b60aa996fbc7db1c28cf9?d=identicon&s=25 Carmine Moleti (carminem)
on 2007-05-12 11:50
Salve a tutti,

Ho un modello in Rails che ha alcuni campi assegnati per mezzo di:

istanza.nome_campo = :valore

Orbene, per tutti i campi tranne uno, quando vado a recuperare il valore
dello stesso mi ritorna correttamente la rappresentazione in stringa del
simbolo assegnato.
Dico correttamente perchè il campo è dichiarato come stringa nella
migration.

Il campo che ha il comportamento anomalo mi restituisce:

--- :valore

Le assegnazioni per i campi di cui sopra, vengono _tutte_ fatte in un
unico punto del controller.

Ho già fatto ricerche con grep e con TexMate per vedere se, da qualche
parte nel progetto, abbia modificato qualcosa per quel campo in
particolare. Sfortunatamente, non trovo nulla.

Aggiungo che, se eseguo l'assegnazione dalla console di Rails, il
problema non si manifesta.

Da cosa potrebbe dipendere?
Dde61819bc154a68a11a41b605ff6b24?d=identicon&s=25 Giovanni Intini (Guest)
on 2007-05-12 12:01
(Received via mailing list)
Il campo nel db è stringa ?

Il giorno 12/mag/07, alle ore 11:50, Carmine Moleti ha scritto:
74ba9c207c0b60aa996fbc7db1c28cf9?d=identicon&s=25 Carmine Moleti (carminem)
on 2007-05-12 12:22
Giovanni Intini wrote:
> Il campo nel db � stringa ?

Si, questa è tutta la migration:

    create_table :orders do |t|
      t.column :user_id, :integer
      t.column :user_ip, :string
      t.column :created_at, :timestamp
      t.column :updated_at, :timestamp
      t.column :stato, :string, :default => 'aperto'
      t.column :fase, :string
      t.column :spedizione, :string, :default => 'pacco1'
      t.column :pagamento, :string, :default => 'bonifico'
      t.column :indirizzo, :string
      t.column :civico, :integer
      t.column :cap, :integer
      t.column :comune, :string
      t.column :provincia, :string
      t.column :telefono, :string
      t.column :email, :string
      t.column :note, :string
    end

E qui l'unico punto dove assegno il campo incriminato: "stato"

  def conferma
    @order = Order.find(session[:ordine])
    @order.stato = :confermato
    @order.save!
    empty_cart
  end

Stò impazzendo per venirne fuori.
74ba9c207c0b60aa996fbc7db1c28cf9?d=identicon&s=25 Carmine Moleti (carminem)
on 2007-05-14 11:38
Dopo tanto sbattimento ne sono venuto a capo.
Riporto di seguito, a beneficio di quelli che potrebbero avere le mie
stesse lacune.

I campi "non-db" vengono serializzati con YAML. Questo spiega perchè nel
DB, e quindi a video, mi viene restituito: "--- :simbolo\n".

Per ottenere il comportamento da me voluto è bastato aggiungere nella
classe in questione una serie di: "serialize(nome_attributo)".

In questo modo, ActiveRecord, si occupa della serializzazione e della
successiva deserializzazione dell'attributo specificato.

Phew :)

Ed i libri, non ne parlano mai (almeno non quelli che ho letto io).
B3220b2d1a7c169c9bd3d46af9e5d5ad?d=identicon&s=25 Stefano Cobianchi (Guest)
on 2007-05-14 13:36
(Received via mailing list)
On May 14, 2007, at 11:38 AM, Carmine Moleti wrote:

>
> In questo modo, ActiveRecord, si occupa della serializzazione e della
> successiva deserializzazione dell'attributo specificato.
>
> Phew :)
>
> Ed i libri, non ne parlano mai (almeno non quelli che ho letto io).

Pagina 313 di "Agile programming with Rails", 2a edizione
Pero' scusa, se nel campo devi memorizzare un simbolo, perche' non
memorizzi direttamente
una stringa e poi chiami #intern quando ti serve il simbolo? Cosi' ti
risparmi i passaggi
di serializzazione/deserializzazione tramite YAML.
Se invece devi memorizzare strutture arbitrarie e non solo simboli,
come non detto.

--
Stefano Cobianchi
stefano@tomato.it
74ba9c207c0b60aa996fbc7db1c28cf9?d=identicon&s=25 Carmine Moleti (carminem)
on 2007-05-14 14:15
Stefano Cobianchi wrote:
> Pagina 313 di "Agile programming with Rails", 2a edizione

Ecco, appunto :) Mi manca la pagina 313 :-P (Che memoria di m....)

> Pero' scusa, se nel campo devi memorizzare un simbolo, perche' non
> memorizzi direttamente
> una stringa e poi chiami #intern quando ti serve il simbolo? Cosi' ti
> risparmi i passaggi
> di serializzazione/deserializzazione tramite YAML.

Hai perfettamente ragione ed, infatti, è quello che farò.
Nella bozza che ho scritto, ho utilizzato i simboli ed è saltato fuori
questa cosetta che mi era completamente sfuggita nella fase di
apprendimento.

Era interessante, per me, capire il perchè del problema.

Fatto ciò, è logico utilizzare il metodo più indolore possibile che, nel
mio caso, è proprio quello della stringa!

> Se invece devi memorizzare strutture arbitrarie e non solo simboli,
> come non detto.

Grazie per il suggerimento!
This topic is locked and can not be replied to.