就像把学生加入课堂一样
每次我通过CSV文件上传学生时,他们都与当前教室相关联,同一学生可以上传到另一个教室
has_many :classroom_students
has_many :students, through: :classroom_students
has_many :classroom_students
has_many :classrooms, through: :classroom_students
我正在尝试通过CSV文件更新学生和教室模型,其中CSV文件将包含学生的ID。我对联合表更感兴趣,因为我正在处理具有唯一性的学生/教室名称:true
我有学生和教室模型和联合课堂教室_学生
如果值不同,如何在我的联合表中创建新记录,如果已经存在则显示通知?
下面是我目前用于创建新记录的代码
student = Student.last
classroom = Classroom.last
student.classrooms << classroom
以下完整代码
def self.import(file, user_id)
spreadsheet = Roo::Spreadsheet.open(file.path)
header = spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
row = Hash[[header, spreadsheet.row(i)].transpose]
student = find_by(id: row["id"]) || new
student.attributes = row.to_hash.merge(user_id: user_id)
student.save!
#for creating an associating for the new students added
student = Student.last
classroom = Classroom.last
student.classrooms << classroom
end
end
end # end class
答案 0 :(得分:0)
您可以在ClassroomStudent
模型上使用唯一性验证 - 要求student_id
是唯一的,但要将其范围限定为classroom_id
,这实际上意味着您需要student_id
和classroom_id
的组合是唯一的,我认为这是您正在寻找的。这意味着更多的学生可以加入同一个教室,同一个学生可以加入更多的教室,但同一个学生不能再次加入同一个教室。在ClassroomStudent
:
validates :student_id, uniqueness: { scope: :classroom_id, message: "can only belong to this classroom once" }
希望有所帮助!