我有一个表,其中包含与每个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
仍然想知道是否有更好的方法。
答案 0 :(得分:2)
你犯了一些错误:
where(...)
不应包含WHERE
语句,也不应包含完整查询WHERE
语句包含一个没有填写数据的占位符school_user_id = (?)
WHERE
语句被包含在'
中,这会导致数据库中的字符串解释。试试这个:
@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