【问题标题】:Rails Order Model By Nested Attributes in JSONB fieldRails 按 JSONB 字段中的嵌套属性排序模型
【发布时间】:2017-04-01 20:16:13
【问题描述】:

我有一个Campaign 模型,其转化率如下所示:

campaign.quota_data["raw_quota_data"][0]["Conversion"] = 33

我想做类似的事情

Campaign.all.order(quota_data["raw_quota_data"][0]["Conversion"])

最好的方法是什么?

编辑:quota_data 数据结构的示例:

{"raw_quota_data"=>
  [
    {"QuotaCPI"=>1.5, "Questions"=>nil, "Conversion"=>0, "SurveyQuotaID"=>4205891, "SurveyQuotaType"=>"Total", "OverQuotaThreshold"=>true}
  ],
  "available_quotas"=>[{"id"=>4205891, "cpi"=>1.0499999999999998, "name"=>"Total", "traits"=>{}, "available"=>400, "conversion"=>0}],
  "rejectable_trait_groups"=>[]
}

【问题讨论】:

    标签: ruby-on-rails postgresql jsonb


    【解决方案1】:

    您基本上是在从数据库中获取数据后尝试在内存中进行排序。你可以使用array.sortarray.sort_by

    Campaign.all.sort_by {|c| c.quota_data["raw_quota_data"][0]["Conversion"]}}
    

    【讨论】:

    • 这让我走上了正轨。我最终想按降序对它们进行排序,所以我选择了atc = atc.sort {|a,b| b.quota_data["raw_quota_data"][0]["Conversion"] <=> a.quota_data["raw_quota_data"][0]["Conversion"]}
    • 可能是 Campaign.all.sort_by {|c| -c.quota_data["raw_quota_data"][0]["Conversion"]}} 本来可以工作的..只是值的减号;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多