2017-04-01 111 views
0

我有了這樣的上市轉化率Campaign模型:Rails的訂購型號通過嵌套屬性在JSONB場

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"=>[] 
} 

回答

1

你基本上是試圖從數據庫中獲取數據後,做一個在內存中的排序。你可以使用array.sortarray.sort_by

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

這讓我沿着正確的軌道。我最終想要按降序對它們進行排序,所以我用'atc = atc.sort {| a,b | b.quota_data [「raw_quota_data」] [0] [「Conversion」] <=> a.quota_data [「raw_quota_data」] [0] [「Conversion」]} –

+0

可能是Campaign.all.sort_by {| c | -c.quota_data [「raw_quota_data」] [0] [「Conversion」]}}會工作..只是一個減號的值;) – shiladitya