2017-04-01 1 views
0

Ich habe ein Campaign Modell, das eine Conversion-Rate wie folgt aufgeführt hat:Rails Sortierung Modell durch verschachtelte Attribute in JSONB Feld

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

Ich möchte so etwas wie

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

tun Was ist der beste Weg, dies zu erreichen?

Edit: Beispiel dafür, was die quota_data Datenstruktur wie folgt aussieht:

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

Antwort

1

Sie im Grunde versuchen, ein im Speicher Art zu tun, nachdem Daten aus der Datenbank abgerufen werden. Sie könnten nur verwenden array.sort oder array.sort_by

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

Das brachte mich auf dem richtigen Weg. Am Ende wollte ich sie in absteigender Reihenfolge sortieren, also ging ich mit 'atc = atc.sort {| a, b | b.quota_data ["raw_quota_data"] [0] ["Konvertierung"] <=> a.quota_data ["raw_quota_data"] [0] ["Konvertierung"]} ' –

+0

wahrscheinlich Campaign.all.sort_by {| c | -c.quota_data ["raw_quota_data"] [0] ["Konvertierung"]}} hätte funktioniert .. nur ein Minuszeichen für den Wert;) – shiladitya

Verwandte Themen