【问题标题】:ActiveRecord find position (index) of record within relation based off value of attributeActiveRecord 根据属性值在关系中查找记录的位置(索引)
【发布时间】:2016-11-21 21:41:24
【问题描述】:

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

【问题讨论】:

    标签: sql ruby-on-rails activerecord


    【解决方案1】:

    收集ids并找到current_user.id的索引

    index = User.all.order(engagement: :desc).map(&:id).index(current_user.id)
    

    你可以直接拔掉 id 来避开地图

    index = User.order(engagement: :desc).pluck(:id).index(current_user.id)
    

    【讨论】:

    • 这太棒了!在我的测试中将响应时间减少了大约 30%。谢谢
    • @usha - 感谢您的回答:如果记录大于 1000 条记录,您知道如何获取索引:由于内存问题,这种方法对于大型集合可能会出现问题?
    【解决方案2】:

    @BKSpureon 你可以使用类似的东西在数据库中完全做到这一点

    User.where("engagement < ?", current_user.engagement).count + 1
    

    【讨论】:

    • User.where("engagement &lt;= ?", current_user.engagement).count 避免最后出现+ 1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多