ActiveRecord查找并只返回选定的列

编辑2

如果你偶然发现了这个问题,请检查两个答案,因为我现在使用pluck


我有一个相当大的自定义数据集,我想返回作为json回声。 一部分是:

l=Location.find(row.id) tmp[row.id]=l 

但我想要做一些事情:

 l=Location.find(row.id).select("name, website, city") tmp[row.id]=l 

但这似乎并没有工作。 我将如何得到这个工作?

谢谢

编辑1
或者,有没有办法,我可以通过一个只包含我想要的属性数组?

在Rails 2中

l = Location.find(:id => id, :select => "name, website, city", :limit => 1)

…要么…

l = Location.find_by_sql(:conditions => ["SELECT name, website, city FROM locations WHERE id = ? LIMIT 1", id])

这个参考文档给出了你可以在.find使用的所有选项列表,包括如何用数字,id或其他任意列/限制来限制。

在Rails 3 / ActiveRecord查询接口

l = Location.where(["id = ?", id]).select("name, website, city").first

参考: 活动logging查询接口

您也可以交换这些链接调用的顺序,执行.select(...).where(...).first – 所有这些调用都是构造SQL查询,然后将其发送出去。

动物内脏(列)

此方法devise用于执行单列select作为直接SQL查询返回具有指定列名称值的数组这些值具有与列相同的数据types。

例子:

 Person.pluck(:id) # SELECT people.id FROM people Person.uniq.pluck(:role) # SELECT DISTINCT role FROM people Person.where(:confirmed => true).limit(5).pluck(:id) 

http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck

其引入的导轨3.2以上,只接受单列。 在导轨4中,它接受多列

我的回答很晚,因为我是一个非常新的开发者。 我想我的朋友看的是这样的:

Location.select(:name, :website, :city).find(row.id)

顺便说一下,这是Rails 4