2016-12-24 41 views
0

我试图通过收集的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 

这将产生:

enter image description here

但是,这显然是所有记录,而我只希望当前用户显示,我不知道如何正确设置日期(updated_at属性)。

+0

对于您要查找的查询,你要查找包含difficulty_ids(即值的所有行:所有行ID为4,2,1,2 OR 3)?你是否想要重复相同值的行 - >数字2有两个值? – the12

+0

@ the12嗨,是的,所以简单地说我想要做的是在样条图上绘制每条记录的updated_at属性的难度值。 y轴上的困难和x轴上的updated_at日期。重复是好的,因为用户在视图中选择1 - 5,所以一些将是相同的。这真的是一个基本的线图。 – Co2

+0

@ the12我将尝试您提出的解决方案,但它消失了!为了澄清它必须是动态的,用户可以有超过5件作业,因此超过5个难度值。是否使用了像这样的OR语句? – Co2

回答

1

我认为你的SQL是错误的,请尝试"homework_id in (?)"而不是homework_id = (?),以选择具有多个值的行。

你的代码应该是:

def student_feedback 
    difficulty_ids = current_user.school_user.homework_students.pluck(:difficulty) 
    @homeworks = HomeworkStudent.where(["homework_id in (?)", difficulty_ids]).first 
end 
+0

谢谢,我试过,但没有呈现在页面的源代码:}, 系列:[{ 名称:“困难”, 数据:[空] }] – Co2

+0

嗨@ CO2,所以查询现在工作,和你期待'homeworks'的结果,但你得到的结果为0,对吗?我看到2个选项:a)您可能遇到数据一致性问题,或者b)您可能需要考虑这个“空白结果”的情况。希望能帮助到你! –

+0

我期待结果来自难度栏,而不是作业,也许我在我的语法中以错误的方式讨论它?从byebug:SchoolUser Load(0.5ms)选择'school_users'。*从'school_users' WHERE'school_users'.'user_id' = 1 LIMIT 1 (0.5ms)SELECT'homework_students'.'difficulty' FROM'homework_students' WHERE' homework_students'.'school_user_id' = 10001 返回值为:无 – Co2

相关问题