假设,数据库中有三个表:
课程(:id, :name)
course_details (:course_id, :effective_date, :status),
course_codes (:course_detail_id, :code)
课程有很多 course_details
course_detail 有很多课程代码
课程可以有多条有效日期适用的 course_details 记录(意味着系统中只会使用一条 course_detail 记录)。
问题陈述:我想通过给定代码的课程代码过滤课程。并且课程应该只被与有效日期 course_detail 链接的 course_codes 过滤,并且应该跳过过去有效日期的记录。
course = Course.find(params[:id])
course_detail = CourseDetail.find_by(effective_date: CourseDetail.max(effective_date), course_id: course.id)
如果我使用此代码,这将过滤课程而不考虑有效日期课程详细信息:
Course.left_joins(course_details: :course_codes).where(course_details: { course_codes: { code: params[:code] } })
培训班:
ID | 姓名 |
---|---|
1 | 英语 |
2 | 数学 |
课程详情:
ID | course_id | 生效日期 |
---|---|---|
1 | 1 | 2020-10-01 |
2 | 1 | 2021-01-01 |
3 | 2 | 2020-09-01 |
课程代码:
ID | course_detail_id | 代码。 |
---|---|---|
1 | 1 | eng-01 |
2 | 2 | 英505 |
3 | 3 | 数学-01 |
当我通过code = eng-01它应该返回空数组而不是 id 1。
有人能帮帮我吗?