Drew Rush
Drew Rush

Reputation: 720

Where returns column name along with value

Here is my code:

<%= DimensionVersion.where(:dimension_id => 1).select("name") %>

I expect to get a list of dimension version names where :dimension_id => 1. There are four in the database.

Instead I get this:

#<ActiveRecord::Relation:0x3d351c8>

EDIT:

I figured out how to return what I wanted (sort of) with this:

<%= DimensionVersion.select("name").where(:dimension_id => 1).all %>

Which returns:

[#<DimensionVersion name: "Default">, #<DimensionVersion name: "Test1">, #<DimensionVersion name: "Test2">, #<DimensionVersion name: "Test3">]

However, I don't want it returned with #<DimensionVersion Name: ... >. I tried removing = from the leading tag, but then nothing returned.

Upvotes: 0

Views: 96

Answers (3)

Drew Rush
Drew Rush

Reputation: 720

I was able to get rid of the column names by using the collect method like so:

DimensionVersion.select("name").where(:dimension_id => 1).all.collect { |d| [d.name]}

Upvotes: 0

Gaurav Agarwal
Gaurav Agarwal

Reputation: 14843

DimensionVersion.where(:dimension_id => 1).select("name")

I think you need the pluck method.

Rewrite the above as:

DimensionVersion.where(:dimension_id => 1).pluck(:name)

Similarly even a higher level construct like collect can be used as:

DimensionVersion.where(:dimension_id => 1).collect(&:name)

Hope this helps.

Upvotes: 2

Jiř&#237; Posp&#237;šil
Jiř&#237; Posp&#237;šil

Reputation: 14412

AR returns Relation so that you can chain conditions etc. If you want the actual results, call #all, #first, #each,... on it:

DimensionVersion.where(:dimension_id => 1).select("name").all

Querying with rails is such a pain in the butt I'm about to abandon the whole framework and go back to php.

You might want to read the guides: Active Record Query Interface.

Upvotes: 1

Related Questions