У меня есть контроллер с кодом, который выглядит примерно так: Идея состоит в том, чтобы взять массив идентификаторов пользователей и вернуть совпадающие объекты пользователей в порядке, в котором были заданы идентификаторы.
def index
user_ids = params[:user_ids]
users = User.where(id: user_ids)
users_by_id = users.inject({}) do |hash, user|
hash[user.id] = user
hash
end
sorted_users = user_ids.map do |user_id|
users_by_id[user_id]
end
render json: sorted_users, each_serializer: ::UserSerializer
end
Этот код не работает, если пользователь не существует для данного идентификатора пользователя со следующей ошибкой:
NoMethodError - undefined method `each' for nil:NilClass:
Как я могу реализовать эту функцию, чтобы для всех недопустимых идентификаторов пользователя конечный массив просто содержал ноль?
Например, если клиент запрашивает /users?user_ids[]=1&users_ids[]=2&user_ids[]=3
, а записи существуют только для идентификаторов 1
и 2
, я хочу, чтобы ответ JSON выглядел примерно так:
[
{id: 1, name: "Alice"},
{id: 2, name: "Bob"},
null
]