# Iterare sugli elementi di un'istanza di ActiveRecord

**URL:** <https://www.ruby-forum.com/t/iterare-sugli-elementi-di-unistanza-di-activerecord/179661>\
**Category:** IT\
**Created:** [December 1, 2009, 11:51am UTC](https://www.ruby-forum.com/t/iterare-sugli-elementi-di-unistanza-di-activerecord/179661 "2009-12-01T11:51:43Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [December 1, 2009, 11:51am UTC](https://www.ruby-forum.com/t/iterare-sugli-elementi-di-unistanza-di-activerecord/179661/1 "2009-12-01T11:51:43Z")

</div>

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 ☹

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 ☹

come potrei risolvere?

Grazie a tutte le persone che mi vorranno aiutare

Ciao

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [December 1, 2009, 12:02pm UTC](https://www.ruby-forum.com/t/iterare-sugli-elementi-di-unistanza-di-activerecord/179661/2 "2009-12-01T12:02:53Z")

</div>

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.

> **[using (IMHO)](https://usingimho.wordpress.com/)**
>
> Andrea Dallera 's blog

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [December 1, 2009, 12:23pm UTC](https://www.ruby-forum.com/t/iterare-sugli-elementi-di-unistanza-di-activerecord/179661/3 "2009-12-01T12:23:22Z")

</div>

Il 01 dicembre 2009 11.51, pezzuya … [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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 ☹

ci sono i Dirty Objects:  
[http://api.rubyonrails.org/classes/ActiveRecord/Dirty.html](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

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [December 1, 2009, 4:19pm UTC](https://www.ruby-forum.com/t/iterare-sugli-elementi-di-unistanza-di-activerecord/179661/4 "2009-12-01T16:19:26Z")

</div>

Ho risolto con:

User.column\_names.each do |c|  
userold[c] != usernew[c]  
end

grazie a tutti 😉

---

<div class="post-metadata">

**Author:** ![pezzuya](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/eada6e/32.png) [@pezzuya](https://www.ruby-forum.com/u/pezzuya)\
**Post date:** [December 1, 2009, 12:23pm UTC](https://www.ruby-forum.com/t/iterare-sugli-elementi-di-unistanza-di-activerecord/179661/5 "2009-12-01T12:23:57Z")

</div>

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

> **[ActiveRecord::Base](https://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002348)**
>
> Active Record Active Record objects don't specify their attributes directly, but rather infer them from the table definition with which they're linked.

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. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha  
scritto:

> > non trovo il modo per farlo ☹  
> > come potrei risolvere?

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

Prima di stampare questa email pensa all’ambiente
