ruby-on-rails 从集合中获取所有id

mqkwyuun  于 2023-04-22  发布在  Ruby
关注(0)|答案(5)|浏览(165)

我的收藏品是这样的:

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

我如何在不使用循环的情况下获得此项目的所有id?我可以使用以下方法吗:

hotels.ids ?

谢谢你

aelbi1ox

aelbi1ox1#

您也可以只提取ID。

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

idv4meu82#

Rails 6+添加了名为extract_associateddocs的东西|blog
其中可以查询集合/列表的关联(has_many)。
例如,一个公司有很多酒店,每个酒店has_many个经理,获取所有酒店经理关联的用户id:

hotels = Company.hotels.active
hotels.extract_associated(:mangers).flatten.pluck(:user_id)
pdsfdshx

pdsfdshx3#

hotels.map(&:id)hotels.map{|h| h.id }怎么样?
它们对Ruby来说都意味着同样的事情,第一个通常对习惯的Ruby爱好者更好,而第二个对于初学者来说更容易理解。

e0uiprwp

e0uiprwp4#

如果你只需要一个包含所有id的数组,你应该使用**pluck**,因为它可以进行正确的查询,你不必使用任何ruby。此外,它不必为从DB返回的每条记录示例化一个Hotel对象。(速度更快)。

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

polkgigr5#

如果你使用的是Rails〉4,你可以使用ids方法:

Person.ids  # SELECT people.id from people

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

相关问题