ruby-on-rails ActiveRecord查找并仅返回选定的列

f5emj3cl  于 2023-10-21  发布在  Ruby
关注(0)|答案(3)|浏览(138)

编辑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

但这好像不管用我该怎么做?
thx

编辑1

或者,有没有一种方法,我可以传递一个数组,只包含我想要包含的属性?

7lrncoxx

7lrncoxx1#

pluck(列名称)

这个方法被设计用来执行选择通过一个单一的列作为直接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中,它接受多列

zkure5ic

zkure5ic2#

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])

This reference doc为您提供了可以使用.find的完整选项列表,包括如何通过数字,id或任何其他任意列/约束进行限制。

在Rails 3 w/ActiveRecord查询接口中

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

参考号:Active Record Query Interface
您还可以交换这些链式调用的顺序,执行.select(...).where(...).first-所有这些调用都是构造SQL查询,然后发送它。

zbdgwd5y

zbdgwd5y3#

我的回答是相当的,但这是你可以做的:

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

顺便说一句,这是Rails 4

相关问题