Рубиновый эквивалент ActiveRecord Group по запросу - PullRequest
2 голосов
/ 17 августа 2010

Я хочу выполнить операцию с массивом, возвращаемым из запроса ActiveRecord.Это функциональность, которую я бы сделал на ActiveRecord напрямую.

Modification.find(:all, :group=>'ref_id,start_date', :order=>'updated_at desc')

Выше работает нормально, как ожидалось.Но проблема в том, что я не могу выполнить это напрямую по некоторым причинам.Но у меня есть массив.Я не могу использовать символ :group в массиве по очевидной причине, что это не ActiveRecord.Но я бы хотел такую ​​же функциональность.Что-то вроде

modifications = Modification.all
modifications.find(:all, :group=>'ref_id,start_date').sort(:order=>&:updated_at)

Выше не будет работать по понятным причинам, но как сделать аналогичную реализацию ActiveRecord для массива.

1 Ответ

2 голосов
/ 17 августа 2010

Если вы хотите отсортировать перед группой:

modifications.group_by{|modification| "#{modification.ref_id}#{modification.start_date}"}.values.collect{|modification_array|
  modification_array.sort_by{|mod| mod.updated_at}.last
}

Если вы хотите отсортировать после:

modifications.group_by{|modification| "#{modification.ref_id}#{modification.start_date}"}.values.map(&:first).sort_by{|mod| mod.updated_at}.invert

Не проверено:).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...