Iterate through model

Hi there,

my problem is kind of difficult to explain but maybe simple to answer: I
have a model (book) with author:string, title:string, id:integer and so
on.
If I do a query @book = Book.find(:id => 123) the result is an instance
of book.
Now I want to iterate through the key/value pairs of this instance, but
as it is not a hash methods like “each” don’t work.

Example:

<% @book.each do |k,v|%>


<%= k %>
<%= v %>

<% end %>

Can anyone please point me to the right direction?

Thanks and greetings
Sven

I forgot to mention that my model does not inherit from activeRecord.
It’s a MongoMapper::Document…

On Sun, Jul 18, 2010 at 6:54 AM, Sven K. [email protected]
wrote:

Now I want to iterate through the key/value pairs of this instance, but
as it is not a hash methods like “each” don’t work.

<% @book.each do |k,v|%>

@book.attributes.each do …


Hassan S. ------------------------ [email protected]
twitter: @hassan

Hi Sven,

On Sun, Jul 18, 2010 at 8:54 AM, Sven K. [email protected]
wrote:

Example:

<% @book.each do |k,v|%>

<%= k %>
<%= v %>

<% end %>

Can anyone please point me to the right direction?

I’m not sure why you want to do this as it will be much less readable
than explicitly enumerating the fields.

Having said that, I’d recommend you take a look through the public
methods for your instance variable (I’ve never used MongoDB). There’s
probably an equivalent to ‘attribute_names’ which returns an array of
all column names in an AR model. If you were using AR you could
iterate through the array for the ‘keys’ and use @book[‘k’] for the
values.

HTH,
Bill

@book.attributes.each do …

Thanks a lot, Hassan, that was it!

S.