2015-08-31 2 views
0

У меня был массив пользователей и массив из них id. Мне нужно создать хэш с {name => id}, но с порядком массива id. В качестве примера, когда я писал:Rails order hash по значениям и массиву

keys = [5, 3, 2, 4, 1] 
users = User.all.where(id: keys).pluck(:name, :id).to_h 

Это вернуть мне {"User_1"=>2, "User_2"=>3, "User_3"=>4, "User_4"=>5, "User_0"=>1}

Но я должен получить такую ​​вещь:

{"User_4"=>5, "User_2"=>3, "User_1"=>2, "User_3"=>4, "User_0"=>1} 

Есть ли возможность была такой хэш где операции?

ответ

0

Массив пользователей, которые вы получаете из своей базы данных, упорядочивается столбцом updated_at. Попробуйте это:

users = User.where(id: keys).order(id: :desc).pluck(:name, :id).to_h 
+0

Как вы можете видеть, мой ключи массив имеет значения [5, 3, 2, 4, 1] 4 Пребывание после 2. –

+0

я не заметил. И я боюсь, что вы не получите результат, который вам нужен в одном простом запросе, из-за сортировки на уровне db –

+0

Может быть, проще найти какое-нибудь обходное решение? Например, добавление столбца позиции в таблицу –

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