Сортировка результатов, возвращаемых из запроса, как вложенный запрос

#ruby-on-rails #ruby #postgresql

#ruby-on-rails #ruby #postgresql

Вопрос:

У меня есть запрос, который я использую, чтобы найти последние рейтинги ключевого слова в огромной таблице. Для достижения этой цели я использую следующий запрос.

 @results = KeywordRanking.includes(:business_keyword, :keyword)
                           .where("business_keyword_id in (?)",
                                  biz_keywords.select(:id))
                           .select("distinct on (business_keyword_id) *")
                           .order("business_keyword_id, rank_date desc")
  

Изначально мы использовали разбивку на страницы во внешнем интерфейсе, но в последнее время мы перешли на will_paginate и потребовали сортировать его во внутреннем интерфейсе. Но когда я передаю другой запрос order. Он добавляется к существующему запросу, что позволяет системе сортировать не только по rank_date , но и по второму полю, называемому rank .

В настоящее время я прохожу во втором порядке, как показано ниже

 @result = if params[:sort]
  @result.order("#{params[:sort]} desc")
end
  

При написании необработанного запроса мы просто создаем вложенный запрос, в котором сортируем полученные результаты. Как мы это делаем в rails.

Комментарии:

1. Как вы передаете другой запрос order? Я имею в виду код, когда вы передаете другой запрос заказа.

2. @sajan Я обновил это в своем вопросе.

3. что ж, вы получаете ожидаемое поведение, поскольку выполняете другую сортировку ранее отсортированных данных, которые хранятся в @result . Есть много способов избежать этого, я смогу предложить один после того, как пойму ваши потребности, например, когда вы сортируете данные для сортировки rank_date desc и когда вы сортируете по столбцу в параметрах?

4. Я знаю, что он выполняет ожидаемое поведение. Но мой вопрос в том, как мы сортируем результаты этого запроса. Приведенный выше запрос дал бы мне 1000 результатов (в зависимости от количества ключевых слов, которые у меня есть), и я хочу отсортировать эту 1000 строк. Я могу сделать это в SQL, используя вложенные запросы. Я хочу сделать то же самое в rails.

5. Обратите внимание, что params[:sort] прямое использование опасно, поскольку пользователи могут отправлять в него вредоносные данные. Вместо этого используйте белый список. См . rails-sqli.org/#order