如果您偶然发现了这个问题,请检查这两个答案,因为我现在正在使用此选项
我有一个相当大的自定义数据集,我想回到json作为回声。一部分是:
l=Location.find(row.id)
tmp[row.id]=l
但我想做类似的事情:
l=Location.find(row.id).select("name, website, city")
tmp[row.id]=l
但这似乎并没有奏效。我怎么能让这个工作?
THX
编辑1
或者,有没有办法可以传递一个只包含我想要包含的属性的数组?
答案 0 :(得分:195)
<强>动物内脏(列)强>
此方法旨在通过单个列执行select作为直接SQL查询返回具有指定列名称值的数组值与列具有相同的数据类型。
示例:
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
它引入了rails 3.2以后只接受单列。在rails 4中,它接受多列
答案 1 :(得分:80)
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])
This reference doc为您提供了可以与.find
一起使用的完整选项列表,包括如何按编号,ID或任何其他任意列/约束进行限制。
l = Location.where(["id = ?", id]).select("name, website, city").first
参考:Active Record Query Interface
您还可以交换这些链式调用的顺序,执行.select(...).where(...).first
- 所有这些调用都是构造SQL查询然后将其发送出去。
答案 2 :(得分:11)
我的回答很晚,因为我是一个非常新的开发人员。这就是你能做的:
Location.select(:name, :website, :city).find(row.id)
顺便说一句,这是 Rails 4