我的AssignmentsController中有一个batch_create
方法,允许分配者一次为多个学生分配作业。这会将assignment_id
保存到每个学生的队列字段中。 assignment_id
被序列化为JSON,并作为数组存储在每个学生的队列字段中。
我的问题是,目前使用batch_create
批量分配作业时,学生最终会在队列中使用相同的assignment_ids。我需要为每个batch_create方法只为每个学生的队列分配1个assignment_id,而不是所有的assignment_ids。
作业本质上是由AssignmentsController生成的活动的实例。
运行batch_create以同时为两名学生分配1个活动的示例将生成以下两个assignment_ids:2316和2317.
在两个学生的队列字段中,结果将包括两个用户的2316和2317。我希望2316位于一个用户的队列中,2317位于另一个用户的队列中,而不是两者。
# app/controllers/assignments_controller.rb
def batch_create
# Make sure current user (teacher) is assigner if not set by admin.
if params[:assignment][:assigner_id].present?
assigner_id = params[:assignment][:assigner_id]
else
assigner_id = current_user.id
end
activities = params[:assignment][:activity_ids].nil? ? []
: params[:assignment][:activity_ids].split(",").map { |s| s.to_i }
students = params[:assignment][:student_ids].nil? ? []
: params[:assignment][:student_ids].split(",").map { |s| s.to_i }
assignments = []
activities.each do |activity_id|
students.each do |student_id|
assignments << {
activity_id: activity_id,
assignee_id: student_id
}
end
end
@assignments = Assignment.create(assignments) do |a|
a.assigner_id = assigner_id
a.assessment = params[:assignment][:assessment]
end
respond_to do |format|
if @assignments.present?
# Add assignment(s) to the student's queue
@assignments.each do |assignment|
students.each do |student_id|
@student = User.find(student_id)
@student.queue_will_change!
@student.queue << assignment.id
@student.save!
end
end
format.html { redirect_to assignments_path, notice: 'Assignments were successfully created.' }
else
format.html { render action: 'new' }
end
end
end
答案 0 :(得分:0)
可能你可以试试这个:
@assignments.each do |assignment|
students.each do |student_id|
@student = User.find(student_id)
@student.queue_will_change!
@student.queue << assignment.id unless @student.queue.include? assignment.id
@student.save!
end
end
应该这样做。
答案 1 :(得分:0)
我最后通过修改该块中的一行来唯一地抓取用户:
# Add assignment(s) to the student's queue
@assignments.each do |assignment|
@student = User.find(assignment.assignee_id)
@student.queue_will_change!
@student.queue << assignment.id
@student.save!
end