我收到了这样的收藏品:
hotels = Hotel.where('selection = ?', 1).limit(4)
如何在没有循环的情况下获取此项目的所有ID?我可以使用类似的东西:
hotels.ids ?
谢谢
答案 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
答案 3 :(得分:7)
您也可以只提取ID。
hotels.select(:id).where(selection: 1)