编辑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
 
或者,是否可以传递仅包含要包含的属性的数组?
Answers:
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或任何其他任意列/约束来限制。
l = Location.where(["id = ?", id]).select("name, website, city").first
参考:活动记录查询界面
您还可以交换这些链接调用的顺序,即.select(...).where(...).first-所有这些调用要做的就是构造SQL查询,然后将其发送出去。
:limit要做到这一点,或:first或:last或什么取决于你想要什么。我链接到的参考文档将告诉您如何执行所有操作。
                    拔(column_name)
此方法旨在通过单个列执行选择,作为直接SQL查询。返回具有指定列名的值的Array。这些值具有与列相同的数据类型。
例子:
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或更高版本的导轨,仅接受单列。在rails 4中,它接受多列
Location.select([:name, :website, :city])如果将其传递给数组
                    我的答案来得很晚,因为我是一个相当新的开发人员。您可以执行以下操作:
Location.select(:name, :website, :city).find(row.id)
顺便说一句,这是Rails 4