我试图通过收集的ID的阵列上呈现的花键图表数据:的MySQL,Highcharts:“操作数应包含1列(S):”错误(后续)
控制器
def student_feedback
difficulty_ids = current_user.school_user.homework_students.pluck(:difficulty)
@homeworks = HomeworkStudent.where("homework_id = (?)", difficulty_ids).first
end
我指定的表称为homework_students:
create_table "homework_students", force: :cascade do |t|
t.integer "school_user_id", limit: 4, null: false
t.integer "homework_id", limit: 4, null: false
t.datetime "completed_on"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.boolean "completed", limit: 1
t.integer "difficulty", limit: 4
t.integer "interest", limit: 4
end
每个学生都有很多不同的家庭作业,他们可以在指定为每个困难列难度值。我正在为每个学生绘制这些数据。
因此,在上面的控制器动作中,我正在为当前用户在数组中关联的每项作业摘取难度数字(1 - 5)。
在我的图表:
...
}
},
series: [{
name: 'Difficulty',
data: [<%= @homeworks.to_json %>]
}]
});
我试图改变行动在:
def student_feedback
difficulty_ids = current_user.school_user.homework_students.pluck(:difficulty)
@homeworks = HomeworkStudent.where(["homework_id = ?", difficulty_ids]).first
end
我不断收到此错误:正在收集的数据
Mysql2::Error: Operand should contain 1 column(s): SELECT `homework_students`.* FROM `homework_students` WHERE (homework_id = (4,2,1,2,3)) ORDER BY `homework_students`.`id` ASC LIMIT 1
是正确的。虽然它说“homework_id = 4,2 ..”(这是不正确的,这些是难度值)。我怀疑这只是一个语法错误。我玩了一下。如果需要可以提供更多的代码。
我理解的问题,但它仅仅是语法......
感激任何帮助。由于
UPDATE:一些进展...
},
series: [{
pointInterval: <%= 1.day * 1000 %>,
pointStart: <%= 3.weeks.ago.at_midnight.to_i * 1000 %>,
name: 'Difficulty',
data: <%= Homework.get_difficulty.to_json %>
},
在我homework.rb型号:
def self.get_difficulty
HomeworkStudent.pluck(:difficulty)
end
这将产生:
但是,这显然是所有记录,而我只希望当前用户显示,我不知道如何正确设置日期(updated_at属性)。
对于您要查找的查询,你要查找包含difficulty_ids(即值的所有行:所有行ID为4,2,1,2 OR 3)?你是否想要重复相同值的行 - >数字2有两个值? – the12
@ the12嗨,是的,所以简单地说我想要做的是在样条图上绘制每条记录的updated_at属性的难度值。 y轴上的困难和x轴上的updated_at日期。重复是好的,因为用户在视图中选择1 - 5,所以一些将是相同的。这真的是一个基本的线图。 – Co2
@ the12我将尝试您提出的解决方案,但它消失了!为了澄清它必须是动态的,用户可以有超过5件作业,因此超过5个难度值。是否使用了像这样的OR语句? – Co2