2016-04-03 2 views

Antwort

1

Sie können dies nicht als Bereich schreiben. Bereiche in Rails wirken auf ActiveRecord::Relation Objekte und sollen SQL Abfragen erzeugen, die gegen die Datenbank ausgeführt werden.

Aber die group_by Methode wird auf dem array aufgerufen, nachdem die Daten von der Datenbank empfangen wurden.

Sie müssen immer zuerst die Daten aus der Datenbank laden, bevor Sie sie mit group_by gruppieren können.

Sie könnten Ihre eigene nested_group_by Methode auf Array schreiben:

class Array 
    def nested_grouped_by(group_1, group_2) 
    group_by { |e| e.send(group_1) }. 
     map { |k, v| { k => v.group_by { |e| e.send(group_2) } } } 
    end 
end 

, die wie folgt verwendet werden:

Team.all.nested_grouped_by(:type, :subtype) 

Notiere die all, die den Umfang, um tatsächlich die Daten aus der Datenbank zu laden erzwingen und gibt ein Array zurück.