# How to iterate through an instance

**URL:** <https://www.ruby-forum.com/t/how-to-iterate-through-an-instance/155794>\
**Category:** Rails\
**Created:** [December 16, 2008, 10:17pm UTC](https://www.ruby-forum.com/t/how-to-iterate-through-an-instance/155794 "2008-12-16T22:17:28Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![tharrisx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/e19adc/32.png) [@tharrisx](https://www.ruby-forum.com/u/tharrisx)\
**Post date:** [December 16, 2008, 10:17pm UTC](https://www.ruby-forum.com/t/how-to-iterate-through-an-instance/155794/1 "2008-12-16T22:17:28Z")

</div>

Hi there,

I have an instance of an object in my database and need to get out every  
element of it, like this:

# Example: model = student

firstname = Fred  
lastname = Williams  
streetname = NULL  
city = NULL  
date of birth = 12.12.1934  
…  
(until there is no more column name left for this model)

If it was an array, I’d use: .each { … }

How do I correctly/efficiently cycle through this one?

Thank you very much for your help!  
Tom

---

<div class="post-metadata">

**Author:** ![tharrisx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/e19adc/32.png) [@tharrisx](https://www.ruby-forum.com/u/tharrisx)\
**Post date:** [December 16, 2008, 10:41pm UTC](https://www.ruby-forum.com/t/how-to-iterate-through-an-instance/155794/2 "2008-12-16T22:41:49Z")

</div>

Iterate over some\_model\_instance.attributes ?

Sent from my iPhone

On 16 Dec 2008, at 21:17, Tom Ha [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![tharrisx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/e19adc/32.png) [@tharrisx](https://www.ruby-forum.com/u/tharrisx)\
**Post date:** [December 16, 2008, 10:49pm UTC](https://www.ruby-forum.com/t/how-to-iterate-through-an-instance/155794/3 "2008-12-16T22:49:24Z")

</div>

Yeah! I guess that will then be something like…

some\_model\_instance.attributes.each { … }

Going to try that…

Thanks, Fred!

(do you ever stop working…? 😉

---

<div class="post-metadata">

**Author:** ![tharrisx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/e19adc/32.png) [@tharrisx](https://www.ruby-forum.com/u/tharrisx)\
**Post date:** [December 16, 2008, 10:51pm UTC](https://www.ruby-forum.com/t/how-to-iterate-through-an-instance/155794/4 "2008-12-16T22:51:51Z")

</div>

On Tue, Dec 16, 2008 at 10:17 PM, Tom Ha  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> lastname = Williams  
> streetname = NULL  
> city = NULL  
> date of birth = 12.12.1934  
> …  
> (until there is no more column name left for this model)
> 
> If it was an array, I’d use: .each { … }
> 
> How do I correctly/efficiently cycle through this one?

I don’t know if its efficient, or right, but  
ActiveRecode::Base#attributes [1]  
seems to do the job

If you already know the fields, you can also do something like that :

[:firstname, :lastname, …].each do |attr|  
val = model.send attr  
end

Hope it will help

## [1] : [ActiveRecord::Base](http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002047)

Gabriel L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![tharrisx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/e19adc/32.png) [@tharrisx](https://www.ruby-forum.com/u/tharrisx)\
**Post date:** [December 17, 2008, 10:30am UTC](https://www.ruby-forum.com/t/how-to-iterate-through-an-instance/155794/5 "2008-12-17T10:30:08Z")

</div>

Thanks a bunch, guys!

---

<div class="post-metadata">

**Author:** ![tharrisx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/e19adc/32.png) [@tharrisx](https://www.ruby-forum.com/u/tharrisx)\
**Post date:** [December 16, 2008, 11:00pm UTC](https://www.ruby-forum.com/t/how-to-iterate-through-an-instance/155794/6 "2008-12-16T23:00:39Z")

</div>

On Dec 16, 2008, at 4:40 PM, Frederick C. wrote:

> > I have an instance of an object in my database and need to get out  
> > date of birth = 12.12.1934  
> > …  
> > (until there is no more column name left for this model)
> > 
> > If it was an array, I’d use: .each { … }
> > 
> > How do I correctly/efficiently cycle through this one?
> > 
> > Thank you very much for your help!  
> > Tom

Or Student.column\_names.each {|column| puts “#{column} =  
#{student.send(column)}” }

You might display something like column.humanize.downcase if you need  
‘date of birth’ with the spaces.

-Rob

Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
removed\_email\_address@domain.invalid

---

<div class="post-metadata">

**Author:** ![tharrisx](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/e19adc/32.png) [@tharrisx](https://www.ruby-forum.com/u/tharrisx)\
**Post date:** [December 17, 2008, 2:20pm UTC](https://www.ruby-forum.com/t/how-to-iterate-through-an-instance/155794/7 "2008-12-17T14:20:21Z")

</div>

Tom,

You may try the inspect() way:

inspect()

Returns a string like ‘Post id:integer, title:string, body:text‘

# File vendor/rails/activerecord/lib/active\_record/base.rb, line 1348

1348: def inspect  
1349: if self == Base  
1350: super  
1351: elsif abstract\_class?  
1352: “#{super}(abstract)”  
1353: elsif table\_exists?  
1354: attr\_list = columns.map { |c| “#{c.name}: #{c.type}” }

- ', ’  
1355: “#{super}(#{attr\_list})”  
1356: else  
1357: “#{super}(Table doesn’t exist)”  
1358: end  
1359: end

Cheers, Sazima
