ROR:帮助简单相加的SQL查询

问题描述:

我有如下保持与各school_user相关school_user_id和作业值的表:ROR:帮助简单相加的SQL查询

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", 

每个school_user与个别功课关联和功课有很多school_users。

我想在我的视图中打印连接到单独作业的总school_users。

在我的控制器:

@total = HomeworkStudent.where("SELECT homework_id FROM homework_students WHERE 'school_user_id = (?)'").sum(:school_user_id) 

模型

homework 
has_many :homework_students, :class_name => 'HomeworkStudent' 

homework_students 
belongs_to :homework, :class_name => 'Homework', :foreign_key => :homework_id 

我不认为这是正确的,我的语法 - 它让打印0

任何想法,也更好的方法有人可能会这样做?

编辑

明白了这一点。

@total = HomeworkStudent.find_by_sql("SELECT homework_id FROM homework_students WHERE school_user_id GROUP BY homework_id").count 

还想知道是否更好的方法。

+0

总和? ..或计数? –

+0

@DavidAldridge嗨!对不起,伯爵。我改变了它,但仍然返回0.我认为我有我的语法前面的东西... – Co2

你做一些错误:

  1. where(...)不应该包含WHERE声明,而不是一个完整的查询
  2. WHERE语句包含一个占位符,它没有用数据填充起来,school_user_id = (?)
  3. 您的WHERE声明被包装到'中,导致DB中的字符串被解释。

试试这个:

@total = HomeworkStudent.where(school_user_id: 123).count 
# or 
@total = HomeworkStudent.where("school_user_id = (?)", 123).count 
+0

谢谢,我做了更改,但它仍然返回0. :(我认为我接近它 – Co2

+0

当我有问题像这样,我喜欢把它带到Rails控制台'rails c'中,看看SQL是什么样子的,听起来好像你没有收回任何东西,如果你把'.count'放到最后,你什么也看不到你可以将你的SQL程序剪切/粘贴到你选择的SQL程序中看看发生了什么 – Dan

+0

@Dan谢谢,没有任何东西会被返回,但是表格是正确填充的 - 这就是问题所在,每个作业都有多个school_users,我只是希望返回每个作业的总数 – Co2