#ruby-on-rails #ruby #ruby-on-rails-3 #ruby-on-rails-4
#ruby-on-rails #ruby #ruby-on-rails-3 #ruby-on-rails-4
Вопрос:
У меня есть пользовательский массив, подобный этому:
users_array = [[1,text for 1],[2,text for 2],[3,text for 3],[4,text for 4],[5,text for 5]]
здесь первым элементом является user_id, а вторым элементом является текст, специфичный для user_id в том же массиве.
Теперь я пытаюсь использовать пользовательский объект из вместо идентификаторов в массиве, подобном этим.
users_array = [[#<User id: 1, encrypted_email: "">,text for 1],[#<User id: 2, encrypted_email: "">,text for 2],[#<User id: 3, encrypted_email: "">,text for 3],[#<User id: 4, encrypted_email: "">,text for 4],[#<User id: 5, encrypted_email: "">,text for 5]]
Я стараюсь не перебирать массив и не обращаться к БД тысячу раз для тысяч пользователей.
Комментарии:
1. Как вы получите объект user для заданного идентификатора, не запрашивая базу данных?
2. Используйте
includes
, если текст связан сUser
3. Попробуйте использовать правильный код Ruby в своих примерах, например, использовать
"text for 1"
вместоtext for 1
.
Ответ №1:
data = users_array.to_h
# find all users with single query and build your map
User.where(id: data.keys).map { |user| [user, data[user.id]] }
Комментарии:
1.
users_array = Hash[users_array]
2.
users_array.to_h
также будет работать, но присвоение хэша переменной с именемusers_array
выглядит немного грязно.