Each campi record

Ho questo:

def crea
@patient = Patient.new(params[:patient])

@patient.cognome = @patient.cognome.upcase ****
@patient.nome = @patient.nome.upcase ****
@patient.codice_fiscale = @patient.codice_fiscale.upcase ***
....
if @patient.save
  flash[:notice] = 'Paziente creato.'
  redirect_to :action => 'list'
else
  render :action => 'new'
end

end

Invece di usare le poco efficienti ed eleganti linee ***
posso usare un, per esempio, each per ciclare tutti i campi e renderli
maiuscoli?

Grazie

On Sep 13, 2006, at 2:45 PM, Biagio M. wrote:

  flash[:notice] = 'Paziente creato.'
  redirect_to :action => 'list'
else
  render :action => 'new'
end

end

Invece di usare le poco efficienti ed eleganti linee ***
posso usare un, per esempio, each per ciclare tutti i campi e renderli
maiuscoli?

class Patient < ActiveRecord::Base
def before_save
@cognome.upcase!
@nome.upcase!
@codice_fiscale.upcase!
end
end

anche se il motivo per cui vuoi girare tutto in maiuscolo nel db mi
sfugge totalmente :slight_smile:

Stefano C. wrote:

class Patient < ActiveRecord::Base
def before_save
@cognome.upcase!
@nome.upcase!
@codice_fiscale.upcase!
end
end
Il problema è evitare le ripetizioni di linee
@cognome.upcase!
@nome.upcase!
@codice_fiscale.upcase!

ed usare un ciclo.

anche se il motivo per cui vuoi girare tutto in maiuscolo nel db mi
sfugge totalmente :slight_smile:

l’upcase è un esempio. Potrebbe essere qualsiasi metodo. L’importante è
non ripeterlo per ogni campo su varie linee di codice

Grazie per la risposta

Chiaro Scuro wrote:

una cosa del genere intendi?

[cognome, nome, codice_fiscale].each { |field| field.upcase! }

nel caso di pochi elementi trovo pi� elengante scriverlo in forma estesa
per�.

E allora lasciamo da parte l’eleganza e riformuliamo il problema:

Come faccio a evitare le ripetizioni ?
Si tratta di capire, almeno per me che non ho esperienza con questo
linguaggio,

come lavorare con questa cosa qui sotto:

@patient = Patient.new(params[:patient])

tipo @params[“patient”].each {… .upcase}

Ripeto, non bisogna guardare al semplice esempio che ho fatto.
Ciao

una cosa del genere intendi?

[cognome, nome, codice_fiscale].each { |field| field.upcase! }

nel caso di pochi elementi trovo più elengante scriverlo in forma estesa
però.
On 9/13/06, Biagio M. [email protected] wrote:

Il problema è evitare le ripetizioni di linee


Chiaroscuro

Liquid Development: http://liquiddevelopment.blogspot.com/

On Sep 13, 2006, at 4:58 PM, Biagio M. wrote:

E allora lasciamo da parte l’eleganza e riformuliamo il problema:

Una soluzione non elegante NON e’ una soluzione :slight_smile:

Ripeto, non bisogna guardare al semplice esempio che ho fatto.
Ciao

E allora fai un esempio non semplice :slight_smile:

Cmq ActiveRecord#attributes ritorna una hash con tutti gli attributi
e i loro valori (clonati).
Nel tuo caso:

x.attributes.each do |attr_name, attr_value| x.send("#{ attr_name }
=", attr_value.upcase) end

Ovviamente i casi in cui puoi fare la stessa operazione
indifferentemente su tutti i campi
sono piuttosto rari…

Stefano C. wrote:

Una soluzione non elegante NON e’ una soluzione :slight_smile:
Elegante qui sta per sintetica.

x.attributes.each do |attr_name, attr_value| x.send("#{ attr_name }
=", attr_value.upcase) end

Questo è quello che cercavo.
Ho provato con
@params[“patient”].each ecc…
@patient.attributes.each ecc…
ma mi serviva questo attr_value.

Dove trovo la documentazione della tua linea di codice? (per attributes)
non sono stato c…apace di trovare quello che mi serviva.

Comunque grazie mille
Ciao

On 9/13/06, Biagio M. [email protected] wrote:

Dove trovo la documentazione della tua linea di codice? (per attributes)
non sono stato c…apace di trovare quello che mi serviva.

Ciao Biagio,
http://api.rubyonrails.org/ ti indica che il metodo ritorna un Hash.

‘ri Hash#each’ ti spiega come usare il metodo each.

ciao,
Antonio