#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, но этого должно хватить.