概述:
我有一个使用mysql数据库的rails项目,该数据从2个来源上传大学生成绩。
当我上传成绩时,我需要先找到“注册”记录,了解该学生注册的课程的哪一部分。“注册”通过belongs_to连接到“学生”和“部分”。学生将存在于学生表中,但是部分和注册可能存在也可能不存在。如果它们不存在,我想创建它们。
当前代码:
我目前解决这个问题的尝试是:
enrolled = Enroll.find_or_create_by(Student: student,
Section: {Course: course, semester: semester, year_offered: year_taken})
我收到以下错误:
Mysql2 ::错误:'where子句'中的未知列'Section.semester':SELECT enrolls
。* FROM enrolls
WHERE Section
。semester
='秋天'AND Section
。year_offered
= 2012 AND Section
。Course_id
= 4 AND enrolls
。Student_id
= 11 LIMIT 1
问题:
1)这是进行此查询的正确方法吗?如果该部分不存在,我是否需要多步骤?
2)为什么我会收到未知的列错误?
其他细节:
sections = Section.where(课程:课程,学期:semester,year_offered:year_taken)工作正常。
注册belongs_to学生和部门。
学生和部分有很多人参加 模型依赖关系图的相关部分是:
我是rails的新手,所以如果你需要别的东西,请告诉我。或者,如果有其他页面已经解释了这一点,请指出我。我发现很难找到相关页面,因为我在搜索时并不熟悉术语。
答案 0 :(得分:1)
看起来您没有加入查询中的Section表。试试这个:
SELECT enrolls.* FROM enrolls
INNER JOIN Section ON enrolls.belongs_to = Section.belongs_to
WHERE Section.semester = 'Fall'
AND Section.year_offered = 2012
AND Section.Course_id = 4
AND enrolls.Student_id = 11
LIMIT 1
答案 1 :(得分:0)
为每个班级做一次,即
section = Section.find_or_create_by(Course: course, semester:
semester, year_offered: year_taken)
和
enrolled = Enroll.find_or_create_by(Student: student,
section_id: section.id)