tarini
July 5, 2007, 10:15am
1
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
tarini
July 5, 2007, 10:23am
2
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:
tarini
July 5, 2007, 10:33am
3
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…
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
tarini
July 5, 2007, 10:43am
4
forse un:
def capitalize_attributes
self.attributes.each do |k,v|
self.attributes[k] = v.upcase if v.is_a? String
end
end
??
Luca
tarini
July 5, 2007, 10:38am
5
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
Anyone?
tarini
July 5, 2007, 11:08am
6
questo sicuro
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
tarini
July 5, 2007, 11:17am
7
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:
tarini
July 5, 2007, 10:46am
8
In effetti è molto meglio del mio
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
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
tarini
July 5, 2007, 3:26pm
10
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
tarini
July 5, 2007, 3:29pm
11
mitico
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
tarini
July 5, 2007, 8:57pm
12
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
tarini
July 5, 2007, 9:02pm
13
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
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
tarini
July 5, 2007, 9:43pm
14
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.
tarini
July 7, 2007, 3:06pm
15
per dovere di cronaca ho trovato un plugin che fa al caso mio…
ForceUppercase
grazie a tutti lo stesso
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