ROR:帮助简单求和sql查询

时间:2016-11-21 18:18:11

标签: sql ruby-on-rails ruby-on-rails-4 sum

我有一个表,其中包含与每个school_user关联的school_user_id和家庭作业的值,如下所示:

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都与个人作业相关联,家庭作业有很多学校用户。

我试图在我看来打印连接到单个作业的学校用户总数。

在我的控制器中:

@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

仍然想知道是否有更好的方法。

2 个答案:

答案 0 :(得分:2)

你犯了一些错误:

  1. where(...)不应包含WHERE语句,也不应包含完整查询
  2. 您的WHERE语句包含一个没有填写数据的占位符school_user_id = (?)
  3. 您的WHERE语句被包含在'中,这会导致数据库中的字符串解释。
  4. 试试这个:

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

答案 1 :(得分:0)

在Rails 5中,您只能在where中使用键值。

与此同时,您无需将完整的sql查询代码写入where

对于计数,您可以使用简单的计数方法。

例如,

@users = User.where(age: 20).count