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