#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