решаемыеГрупповые записи в Rails для диаграммы?
У меня есть круговая диаграмма:
data: [<% HomeworkStudent.where(:school_user_id => current_user.school_user.id).each do | homework_student| %>
[<%= homework_student.homework.classmodule.subject.to_json.html_safe %>, <%= homework_student.difficulty.to_json %>],
<% end %>]
}]
Данные строится нормально, но я ищу, чтобы сгруппировать «трудность» по этому вопросу. Итак, другими словами, на графике должны быть только математика и искусство. Это диаграмма высоких диаграмм.
Я также попытался следующий другой подход через мою модель, но она не работает:
homework.rb
def self.getData
data = []
self.subjectnames.each do |type2|
data << Hash["name", type2, "y", self.type2_count(type2)]
end
data
end
...
private
def self.subjectnames
Classmodule.pluck(:homework_id).uniq
end
def self.type2_count(type2)
HomeworkStudent.where(difficulty: type2).count
end
, а затем на графике, как так:
Controller
@data = Homework.getData()
View:
data: <%= @data.to_json.html_safe %>
Последний маршрут является идеальным маршрутом, но поскольку задействованы разные модели, это немного запутывает.
Существует 3 модели: Classmodule содержит имя предмета, homework_student содержит столбец с трудностями и столбец homework_id.
homework.rb
has_many :homework_students, :class_name => 'HomeworkStudent', dependent: :destroy
belongs_to :classmodule, :class_name => 'Classmodule', :foreign_key => :subject
classmodule.rb
has_many :homeworks, :class_name => 'Homework'
homework_student.rb:
belongs_to :classmodule, :class_name => 'Classmodule', :foreign_key => :subject
Хотя не идеально, и я бы предпочел, чтобы сделать это правильно мой подход теперь в лучших работах, но я просто интересно, как группировать результаты по этому вопросу? И если мне нужно пройти через эту модель для каких-либо предложений?
Спасибо!
решаемые
Благодаря Руби Racer:
В контроллере:
@data = {}
HomeworkStudent.where(:school_user_id => current_user.school_user.id).each do |homework_student|
label = homework_student.homework.classmodule.subject
value = homework_student.difficulty.to_i
@data[label] = (@data[label]) ? (@data[label] + value) : value
end
В графике на виду:
data: <%= @data.to_a.to_json.html_safe %>
Привет, спасибо, я обновил OP с вашим решением и ошибки я получаю ... есть значения nil в столбце трудности ... – Co2
Просто добавьте 'to_i', см. Мой обновленный ответ. Ниль к i равен нулю –
Спасибо, почти там! data: newdata не работает так изменено на данные: <% = @ newdata.to_json.html_safe%>, и это возвращает данные: [["\" Maths \ "", "26"], ["\" Art \ "" , «30»]], правильный формат должен быть как [«Maths», 26] ... – Co2