Как бы вы заменили этот запрос SQL на Ruby, чтобы использовать только код ActiveRecord? - PullRequest
1 голос
/ 03 февраля 2020

Это на самом деле работает (возвращает 5 исполнителей с наибольшим количеством треков в базе данных)

def top_five_artists(genre_name)
  # TODO: return the 5 artists with the more tracks of genre `genre_name`
  Artist.joins(albums: { tracks: :genre }).where(genres: { name: genre_name }).group(:name).order("COUNT(*) DESC").limit(5)
end

, но выдает следующее предупреждение:

ПРЕДУПРЕЖДЕНИЕ ОБ УДАЛЕНИИ: Опасный метод запроса (метод, аргументы которого используются как необработанные SQL), вызываемый без аргумента (ов): (COUNT (*) DES C). Аргументы без атрибутов будут запрещены в Rails 6.1. Этот метод не следует вызывать с предоставленными пользователем значениями, такими как параметры запроса или атрибуты модели. Известные безопасные значения можно передать, обернув их в Arel. sql (). (вызывается из top_five_artists в /home/maxichalbaud/code/maxichalbaud/fullstack-challenges/03-AR-Database/03-ActiveRecord-Basics/Optional-01-Mapping-Existing-Database/app/queries.rb:18)

Как бы вы изменили рефакторинг строки "COUNT (*) DES C"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...