ActiveRecord根据属性值在关系内查找记录的位置(索引)

Dan*_*ell 3 sql activerecord ruby-on-rails

我有一个ActiveRecord User对象集合。User有一个属性,engagement它是一个浮点数。假设users = User.all.order(engagement: :desc)返回1000条记录并且current_user是其中的一个User对象users,我想知道其中的位置或索引current_userusers而无需再次查询数据库或使用each_with_index慢速的枚举器方法。这可能吗?

ush*_*sha 8

收集ids并找到索引current_user.id

index = User.all.order(engagement: :desc).map(&:id).index(current_user.id)
Run Code Online (Sandbox Code Playgroud)

您可以选择ID以避开地图

index = User.order(engagement: :desc).pluck(:id).index(current_user.id)
Run Code Online (Sandbox Code Playgroud)

  • @usha - 谢谢您的回答:如果记录大于 1000 条记录,您知道如何获取索引吗:由于内存问题,这种方法对于大型集合可能会出现问题? (2认同)