[rails] ActiveRecord e lettere maiuscole [un po di introspez

ho bisogno di rendere maiuscole le iniziali di tutte le proprietà dei
modelli della mia applicazione… avevo pensato di utilizzare un
callback
before_save per trasformare le stringhe… ma, tramite introspection,
come
faccio ad accedere alla lista degli attributi ed eventualmente
modificarli???


everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away

before_save :capitalize_attributes

def capitalize_attribtues
self.attributes.each do |a|
# Fai quello che vuoi
end
end

Il giorno 05/lug/07, alle ore 10:14, tarini ha scritto:

ho fatto cosi:

before_save :capitalize_attributes

def capitalize_attributes
self.attributes.each do |a|
a.upcase! if a.is_a? String
end
end

ma non so per quale ragione non cambia nulla… :frowning:

Il 05/07/07, Giovanni I. [email protected] ha scritto:


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away

forse un:

def capitalize_attributes
self.attributes.each do |k,v|
self.attributes[k] = v.upcase if v.is_a? String
end
end

??

Luca

Il giorno 05/lug/07, alle ore 10:32, tarini ha scritto:

attributes ritorna un Hash chiave => valore, quindi a.upcase non
funziona. Dovresti fare qualcosa del tipo self.send("#{a[0]}
=".to_sym, nuovo valore), ma sicuramente esiste un metodo più bello :slight_smile:

Anyone?

questo sicuro :slight_smile:

peccato che non funzioni però…

Il 05/07/07, Giovanni I. [email protected] ha scritto:

end
end

??


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away

In che senso non funziona? Puoi farci il paste di una sessione in
script/console in cui testi il metodo?

Il giorno 05/lug/07, alle ore 11:08, tarini ha scritto:

In effetti è molto meglio del mio :slight_smile:

Il giorno 05/lug/07, alle ore 10:42, Luca M. ha scritto:

e = Event.new
=> #<Event:0xb72b9334 @attributes={“city”=>nil, “end_date”=>nil,
“start_date”=>nil, “name”=>nil, “description”=>nil, “address”=>nil,
“image_id”=>nil}, @new_record=true>
e.name = “Prova evento”
=> “Prova evento”
e.address = “Via prova”
=> “Via prova”
e.city = “citta prova”
=> “citta prova”
e.save
=> true
Event.find_by_name(“Prova evento”)
=> #<Event:0xb725f974 @attributes={“city”=>“citta prova”,
“end_date”=>nil,
“start_date”=>nil, “name”=>“Prova evento”, “id”=>“2”,
“description”=>nil,
“address”=>“Via prova”, “image_id”=>nil}>

utilizzando questa versione

before_save :capitalize_attributes

def capitalize_attributes
self.attributes.each do |k,v|
self.attributes[k] = v.upcase if v.is_a? String
end
end

grazie :slight_smile:

Il 05/07/07, Giovanni I. [email protected] ha scritto:


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away

ehm non l’avevo provato prima… funziona mettendo:

self[k] = v.upcase

che poi e’ equivalente a questo

self.send(“#{a[0]}=”.to_sym, nuovo valore)

che ti ha indicato giovanni
N.B. io ho usato questa libreria:
http://dev.rubyonrails.org/attachment/ticket/4050/uppercase_strings.rb?format=txt

salvala in lib/uppercase_strings.rb nella tua applicazione e nei modelli
metti:

include ActiveRecord::UppercaseStrings
strings_to_uppercase

altri esempi nei commenti nel codice

HTH
Luca

mitico :stuck_out_tongue:

grazie a entrambi

Il 05/07/07, Luca M. [email protected] ha scritto:

N.B. io ho usato questa libreria:

=> “Via prova”


[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away

giusto per curiosità… non era piu comodo evitare il modulo
UppercaseStrings evitando quindi di fare il require?? mettere tutto
dentro
ActiveRecord no?

Il 05/07/07, tarini [email protected] ha scritto:

metti:

=> #<Event:0xb72b9334 @attributes={“city”=>nil, “end_date”=>nil,

Event.find_by_name(“Prova evento”)

In che senso non funziona? Puoi farci il paste di una sessione in
[email protected]



everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away


everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away

quando carico un controller che richiama i modelli segnati con
strings_to_uppercase mi da questo errore nel log

#<NameError: cannot remove Object::InstanceMethods>

e nel browser leggo uno strano:
Not Found `/admin/event’ not found.

WEBrick/1.3.1 (Ruby/1.8.5/2006-08-25) at localhost:3000

Il 05/07/07, tarini [email protected] ha scritto:

che ti ha indicato giovanni
altri esempi nei commenti nel codice

e.address = “Via prova”
“address”=>“Via prova”, “image_id”=>nil}>
end
questo sicuro :slight_smile:


vega 4 - burn and fade away


everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away


everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away

On 7/5/07, tarini [email protected] wrote:

giusto per curiosità… non era piu comodo evitare il modulo
UppercaseStrings evitando quindi di fare il require?? mettere tutto dentro
ActiveRecord no?

il mio amico Paolo mi disse una volta che è utile a individuare gli errori
quando le cose vanno male e in generale a capire chi ha aggiunto cosa a
quale classe.

per dovere di cronaca ho trovato un plugin che fa al caso mio…
ForceUppercase

grazie a tutti lo stesso :slight_smile:

Il 05/07/07, chiaro scuro [email protected] ha scritto:

quando le cose vanno male e in generale a capire chi ha aggiunto cosa a
quale classe.


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away