Comment.all returns array of what?

I have a bad feeling asking this but I did not manage to find an answer
myself :confused:

@comments = Comment.all
@comments is an array.
I can for example access comment.created_at directly, or I could do:
<% @comments.each do |comment| %>
<%= debug comment[“created_at”] %>
<% end %>

I expected comment to be a hash, but comment.keys or comment.values
fail, as
well as an each_pair approach.
[I was actually trying to do a debug output printing all columns and columns names]

bourne wrote in post #976264:

I have a bad feeling asking this but I did not manage to find an answer
myself :confused:

@comments = Comment.all
@comments is an array.
I can for example access comment.created_at directly, or I could do:
<% @comments.each do |comment| %>
<%= debug comment[“created_at”] %>
<% end %>

I expected comment to be a hash, but comment.keys or comment.values
fail, as
well as an each_pair approach.
[I was actually trying to do a debug output printing all columns and columns names]

Is Comment an ActiveRecord subclass? If so, then its instances aren’t
hashes. Check out the docs for ActiveRecord::Base; the attributes
method may be particularly useful.

Best,

Marnen Laibow-Koser
http://www.marnen.org
[email protected]

Sent from my iPhone

On Thu, Jan 20, 2011 at 2:04 PM, bourne [email protected] wrote:

I tried doing what you are doing and It works. Try this in the console:
Comment.all.each { |comment| puts comment[“created_at”] }

Don’t know what debug does, but the above code works.

Thanks Marnen for the pointer to the attributes method!

For the archives:
<% @comments.each do |comment| %>
<% comment.attributes.each_pair do |key, value| %>
<%= key %>: <%= value %>

<% end %>
<% end %>

Please quote when replying.

bourne wrote in post #976269:

Thanks Marnen for the pointer to the attributes method!

For the archives:
<% @comments.each do |comment| %>
<% comment.attributes.each_pair do |key, value| %>
<%= key %>: <%= value %>

<% end %>
<% end %>

You’re welcome! That looks like it will do what you want (but if you’re
not using Rails 3, remember to put in appropriate HTML escaping). Other
possibilities:

  • Just use comment.attributes.inspect
  • Instead of looping explicitly through comments, use render :partial,
    :collection

Also, if you do this a lot (i.e. more than once or twice), build a
helper.

Oh, and consider using Haml instead of ERb…it’s a lot nicer.

Best,

Marnen Laibow-Koser
http://www.marnen.org
[email protected]