Как создать линейную диаграмму ChartKick с ассоциациями Rails?

#ruby-on-rails #ruby #chartkick

#ruby-on-rails #ruby #chartkick

Вопрос:

Я борюсь с форматированием своего кода ruby, чтобы получить желаемый вид диаграммы. Я создаю приложение Rails 6 с несколькими уровнями ассоциаций между таблицами.
У меня есть:

  • В каждом заголовке есть одна статья
  • В каждой статье есть одно мнение
  • В таблице настроений есть столбец оценки

Диаграмма, которую я хочу построить, будет просто иметь вид X-axis = Headline.created_at, Y-axis headline.article.sentiment.score

КОНТРОЛЛЕР

 @headlines = Headline.where("created_at = ?", Date.today)
  

ПРОСМОТР КОДА

 <%= line_chart @headlines.group_by_day(:created_at).count %>
  

Как мне сделать, чтобы ось Y была «оценка» вместо «количество»?

Спасибо.

Ответ №1:

Это зависит от того, как вы настроили отношения своих моделей. Если у вас есть отношение Headline к Sentiment этому

 class Headline
  has_one :article
  has_one :sentiment, through: :article
end
  

Вы можете просто сделать что-то вроде этого

 @headlines.each_with_object({}) do |headline, result|
  result[headline.id] = headline.sentimentamp;.score
end
# { 1: 2, 3: 4}
  

Вы должны включить article и sentiment в свой первоначальный запрос, иначе у вас будет n 1 запрос, подобный этому

 Headline.includes(:article, :sentiment).where("created_at = ?", Date.today)
  

Вероятно, есть более эффективный способ сгруппировать inline в SQL, но этого должно хватить.