Результаты пустые, когда я использую запрос внутри каждого рельса l oop - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть это в моем индексе

def index
  @res = Array.new
  Hours.pluck(:user_id).each do |id|
    @get_data = Hours.where("status >= :status",{status: params[:status]}).where(:user_id => id)
    @res.push @get_data
  end
  json_response(@res)
end

Когда я запускаю свою конечную точку, я получаю:

[]

Когда я использую pluck (: user_id) результаты появляются, но дублируют, поэтому мой вопрос, почему? Результат запроса - сделать сумму определенного поля c, но эта часть также пуста (извлечение этого кода не является необходимым в вопросе)

Я что-то упустил или неправильно использовал итерация? Спасибо, я начал с этого языка, поэтому я спрашиваю. Спасибо!

1 Ответ

0 голосов
/ 04 февраля 2020

Ваш блок кода выглядит не очень эффективно. Насколько я вижу, вы получаете все user_ids из таблицы Hours с Hours.pluck(:user_id) и зацикливаетесь с каждым блоком. Затем вы снова делаете несколько запросов к одной и той же таблице Hours внутри каждого l oop, проверяя значение params [: status].

Я думаю, вы можете просто сделать это, чтобы получить вывод:

def index
  @res = Hours.where("status >= ?", params[:status])
  @res.each do |row|
    # Perform your task here.
  end
  json_response(@res)
end

Чтобы ответить на ваш другой вопрос, почему у вас есть повторяющиеся результаты при вызове pluck (: user_id), он извлекает все результаты из таблицы и сохраняет в массиве. Вы можете сделать это Hours.pluck(:user_id).uniq или даже лучше Hours.select(:user_id).distinct. Надеюсь, это поможет.

...