Ross R
Ross R

Reputation: 389

Rails: Getting column value from query

Seems like it should be able to look at a simple tutorial or find an aswer with a quick google, but I can't...

codes = PartnerCode.find_by_sql "SELECT * from partner_codes where product = 'SPANMEX' and isused = 'false' limit 1"

I want the column named code, I want just the value. Tried everything what that seems logical. Driving me nuts because everything I find shows an example without referencing the actual values returned

So what is the object returned? Array, hash, ActiveRecord? Thanks in advance.

Upvotes: 0

Views: 6292

Answers (2)

mahemoff
mahemoff

Reputation: 46379

For Rails 4+ (and a bit earlier I think), use pluck:

Partner.where(conditions).pluck :code
> ["code1", "code2", "code3"]

map is inefficient as it will select all columns first and also won't be able to optimise the query.

Upvotes: 2

sarvavijJana
sarvavijJana

Reputation: 1212

You need this one

Partner.where( conditions ).map(&:code)

is shorthand for

Partner.where( conditions ).map{|p| p.code}

PS

if you are often run into such case you will like this gem valium by ernie

it gives you pretty way to get values without instantiating activerecord object like

Partner.where( conditions ).value_of :code

UPDATED:

if you need access some attribute and after that update record

save instance first in some variable:

instance=Partner.where( conditions ).first

then you may access attributes like instance.code and update some attribute

instance.update_attribute || instance.update_attributes

check documentation at api.rubyonrails.org for details

Upvotes: 0

Related Questions