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
还想知道是否更好的方法。
答
你做一些错误:
- 的
where(...)
不应该包含WHERE
声明,而不是一个完整的查询 - 您
WHERE
语句包含一个占位符,它没有用数据填充起来,school_user_id = (?)
- 您的
WHERE
声明被包装到'
中,导致DB中的字符串被解释。
试试这个:
@total = HomeworkStudent.where(school_user_id: 123).count
# or
@total = HomeworkStudent.where("school_user_id = (?)", 123).count
总和? ..或计数? –
@DavidAldridge嗨!对不起,伯爵。我改变了它,但仍然返回0.我认为我有我的语法前面的东西... – Co2