Rails:从查询中获取列值

时间:2011-10-12 19:25:49

标签: ruby-on-rails ruby-on-rails-3 activerecord

似乎它应该能够查看一个简单的教程或找到一个快速谷歌的aswer,但我不能......

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

我希望列名为code,我只想要值。尝试了一切似乎合乎逻辑的东西。让我疯了,因为我找到的所有内容都显示了一个示例而没有引用返回的实际值

那么返回的对象是什么?数组,哈希,ActiveRecord?提前谢谢。

2 个答案:

答案 0 :(得分:2)

对于Rails 4+(我认为有点早),请使用pluck

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

地图效率低下,因为它会先选择所有列,也无法优化查询。

答案 1 :(得分:0)

你需要这个

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

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

PS

如果你经常遇到这种情况,你会喜欢这个宝石valium by ernie

它为您提供了很好的方法来获取值而无需实例化像

这样的activerecord对象
Partner.where( conditions ).value_of :code

更新:

如果您需要访问某个属性并在该更新记录之后

首先在某个变量中保存实例:

instance=Partner.where( conditions ).first

然后您可以访问instance.code等属性并更新某些属性

instance.update_attribute || instance.update_attributes

api.rubyonrails.org查看文档了解详情