已解决
我有一个饼图:
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 %>]
}]
数据绘制得很好,但我希望按主题对“难度”进行分组。换句话说,数学和艺术在图表上应该只有一次。这是 highcharts 图表。
我还通过我的模型尝试了以下不同的方法,但它不起作用:
作业.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
虽然不理想,而且我更愿意正确地做到这一点,但我现在在顶部的方法有效,但我只是想知道如何按主题对结果进行分组?如果我必须为此检查模型有什么建议吗?
谢谢!
已解决
感谢 Ruby Racer:
在 Controller 中:
@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
在 View 中的图表中:
data: <%= @data.to_a.to_json.html_safe %>
最佳答案
在不深入模型的情况下,我会选择这样的东西:
@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
@data[label] = (@data[label]) ? (@data[label] + value.to_i) : value.to_i
end
现在@data
看起来有点像这样:
@data
# {"art"=>90, "math"=>200}
@data.to_a
# [["art", 90], ["math", 200]]
这很像您所需要的。现在您只需将其转换为 json 和 html 安全
newdata = @data.map {|subject, difficulty| [subject.to_json.html_safe, difficuty.to_json]}
但你并不真的需要那个。因此,您将 ruby 数组发送到 js:
data: <%= @data.to_a.inspect.html_safe %>
或者,更好的是:
data: <%= @data.to_a.to_json.html_safe %>
关于javascript - 将 Rails 中的记录分组为图表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41665514/