2016-10-31 2 views
0

Я хотел бы получить все записи для конкретной модели и «индексировать» каждый из них по их атрибуту name. Конечным результатом должен быть хэш, где ключи - это имя записи, а значение - это запись. Я могу сделать это достаточно легко с помощью метода, такого какГруппировать все записи по специальному методу в Rails

def self.all_by_name 
    hash = {} 
    all.each { |model| hash[model.name] = model } 
    hash 
end 

Есть ли способ сделать это с помощью активного запроса записи?

ответ

0

Нет, активная запись будет либо возвращать массив или активной записи отношения. Вам придется массировать его после того, как вы выбрали тип данных. ActiveRecor dcan возвращает все, что обычно возвращает SQL. Однако вы можете использовать метод group, который по существу является group by в SQL.

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

+0

Спасибо за отзыв. Я просто преобразовываю массив в хеш, чтобы я мог использовать хеширование для поиска объектов. Я работаю с дорогостоящим алгоритмом, так что быстрее хэш эти объекты один раз, впереди, а не постоянно итерации через массивы. Имена моделей уникальны, поэтому нет беспокойства о перезаписи. Это обычная техника, поэтому я надеялся, что есть простой метод, о котором я не знал. – CodeSmith

Смежные вопросы