Iterare sugli elementi di un'istanza di ActiveRecord

Ciao a tutti.
Ecco il mio nuovo problema:
Devo iterare sugli elementi dell’oggetto User (id, login, name) per
verificare quali di questi sono cambiati dopo “update_attributes” solo
che…

non trovo il modo per farlo :frowning:

Chiaramente con “each” non funziona perchè each non é un metodo di User.
Ho provato a convertire l’oggetto in un array usando “to_a” ma viene
creato un array di un elemento contenente l’oggetto precedente a cui
devo comunque accedere usando la sintassi:

array[0][:id]

e sono al punto di partenza :frowning:

come potrei risolvere?

Grazie a tutte le persone che mi vorranno aiutare

Ciao

Ciao,

non so se ho capito bene qual è il tuo problema: hai un oggetto con 3
campi e vuoi iterarci a la:

user.each do |element|
#la tua logica qui
end

se è questo il tuo caso puoi inserire in User questo metodo:

def each
yield name
yield id
yield login
end

ma onestamente non vedo il senso… credo di aver capito male cosa
intendi. Puoi spiegarti meglio?

Andrea D.

Il 01 dicembre 2009 11.51, pezzuya … [email protected] ha
scritto:

Ciao a tutti.
Ecco il mio nuovo problema:
Devo iterare sugli elementi dell’oggetto User (id, login, name) per
verificare quali di questi sono cambiati dopo “update_attributes” solo
che…

non trovo il modo per farlo :frowning:

ci sono i Dirty Objects:
http://api.rubyonrails.org/classes/ActiveRecord/Dirty.html

@user = User.first
=> #
@user.changed?
=> false
@user.changed
=> []
@user.name = ‘un_nome_diverso’
=> ‘un_nome_diverso’
@user.changed?
=> true
@user.changed
=> [‘name’]
@user.login = ‘unalogindiversa’
=> ‘unalogindiversa’
@user.changed?
=> true
@user.changed
=> [‘name’, ‘login’]
@user.save
=> true
=> @user.changed?
=> false

pietro

Ho risolto con:

User.column_names.each do |c|
userold[c] != usernew[c]
end

grazie a tutti :wink:

Puoi usare il metodo attributes dell’oggetto user
Sulla doc di ActiveRecord

poi puoi iterare sull’hash con each, each_key, o each_value a seconda
di quel che ti serve…

ciao ciao

Piero

Il 01 dicembre 2009 12.02, Andrea D. [email protected] ha
scritto:

non trovo il modo per farlo :frowning:
come potrei risolvere?


Piero B.
Blog: cookedapple.net
Twetter: twitter.com/petecocoon
Books: anobii.com/petecocoon
LinkedIn: http://www.linkedin.com/in/pbozzolo

Prima di stampare questa email pensa all’ambiente