从集合中获取所有ID

时间:2011-10-03 14:41:55

标签: ruby-on-rails ruby

我收到了这样的收藏品:

hotels = Hotel.where('selection = ?', 1).limit(4)

如何在没有循环的情况下获取此项目的所有ID?我可以使用类似的东西:

hotels.ids ? 

谢谢

4 个答案:

答案 0 :(得分:22)

如何尝试hotels.map(&:id)hotels.map{|h| h.id }

它们对Ruby来说意味着同样的东西,第一个通常对习惯的红宝石更好,而第二个对于初学者更容易理解。

答案 1 :(得分:16)

如果您只需要包含所有ID的数组,则应使用 pluck ,因为它可以进行正确的查询,您不必使用任何红宝石。此外,它不必为从DB返回的每条记录实例化一个Hotel对象。 (方式更快)。

Hotel.where(selection: 1).pluck(:id)
# SELECT hotels.id FROM hotels WHERE hotels.selection = 1
# => [2, 3]

答案 2 :(得分:12)

如果您使用的是Rails> 4,您可以使用ids方法:

Person.ids  # SELECT people.id from people

更多信息:http://apidock.com/rails/ActiveRecord/Calculations/ids

答案 3 :(得分:7)

您也可以只提取ID。

hotels.select(:id).where(selection: 1)