我的收藏品是这样的:
hotels = Hotel.where('selection = ?', 1).limit(4)
我如何在不使用循环的情况下获得此项目的所有id?我可以使用以下方法吗:
hotels.ids ?
谢谢你
aelbi1ox1#
您也可以只提取ID。
hotels.select(:id).where(selection: 1)
idv4meu82#
Rails 6+添加了名为extract_associateddocs的东西|blog其中可以查询集合/列表的关联(has_many)。例如,一个公司有很多酒店,每个酒店has_many个经理,获取所有酒店经理关联的用户id:
extract_associated
has_many
hotels = Company.hotels.active hotels.extract_associated(:mangers).flatten.pluck(:user_id)
pdsfdshx3#
hotels.map(&:id)或hotels.map{|h| h.id }怎么样?它们对Ruby来说都意味着同样的事情,第一个通常对习惯的Ruby爱好者更好,而第二个对于初学者来说更容易理解。
hotels.map(&:id)
hotels.map{|h| h.id }
e0uiprwp4#
如果你只需要一个包含所有id的数组,你应该使用**pluck**,因为它可以进行正确的查询,你不必使用任何ruby。此外,它不必为从DB返回的每条记录示例化一个Hotel对象。(速度更快)。
Hotel.where(selection: 1).pluck(:id) # SELECT hotels.id FROM hotels WHERE hotels.selection = 1 # => [2, 3]
polkgigr5#
如果你使用的是Rails〉4,你可以使用ids方法:
ids
Person.ids # SELECT people.id from people
更多信息:http://apidock.com/rails/ActiveRecord/Calculations/ids
5条答案
按热度按时间aelbi1ox1#
您也可以只提取ID。
idv4meu82#
Rails 6+添加了名为
extract_associated
docs的东西|blog其中可以查询集合/列表的关联(
has_many
)。例如,一个公司有很多酒店,每个酒店
has_many
个经理,获取所有酒店经理关联的用户id:pdsfdshx3#
hotels.map(&:id)
或hotels.map{|h| h.id }
怎么样?它们对Ruby来说都意味着同样的事情,第一个通常对习惯的Ruby爱好者更好,而第二个对于初学者来说更容易理解。
e0uiprwp4#
如果你只需要一个包含所有id的数组,你应该使用**pluck**,因为它可以进行正确的查询,你不必使用任何ruby。此外,它不必为从DB返回的每条记录示例化一个Hotel对象。(速度更快)。
polkgigr5#
如果你使用的是Rails〉4,你可以使用
ids
方法:更多信息:http://apidock.com/rails/ActiveRecord/Calculations/ids