Ruby on rails 在Rails 4中使用嵌套循环一次创建多个对象
我的作业控制器中有一个Ruby on rails 在Rails 4中使用嵌套循环一次创建多个对象,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的作业控制器中有一个batch\u create方法,允许作业人员一次将作业分配给多个学生。这会将作业id保存到每个学生的队列字段中assignment_id被序列化为JSON,并作为数组存储在每个学生的队列字段中 我的问题是,目前在使用batch\u create批量分配作业时,学生的队列中的作业ID是相同的。每个批处理创建方法只需为每个学生的队列分配一个作业id,而不是所有作业id 分配本质上是由AssignmentsController生成的活动的实例 batch_create的一个示例
batch\u create
方法,允许作业人员一次将作业分配给多个学生。这会将作业id
保存到每个学生的队列字段中assignment_id
被序列化为JSON,并作为数组存储在每个学生的队列字段中
我的问题是,目前在使用batch\u create
批量分配作业时,学生的队列中的作业ID是相同的。每个批处理创建方法只需为每个学生的队列分配一个作业id,而不是所有作业id
分配本质上是由AssignmentsController生成的活动的实例
batch_create的一个示例运行将一个活动同时分配给两个学生,将生成以下两个分配ID: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
#app/controllers/assignments_controller.rb
def批处理创建
#确保当前用户(教师)不是管理员设置的指派者。
如果参数[:assignment][:assigner\u id]。是否存在?
assigner_id=参数[:assignment][:assigner_id]
其他的
assigner_id=当前_user.id
结束
活动=参数[:分配][:活动\u ID].nil?[]
:params[:assignment][:activity_id].split(“,”).map{s|s.to_i}
学生=参数[:作业][:学生ID].nil?[]
:params[:赋值][:学生ID].split(“,”).map{s|s.to_i}
分配=[]
活动。每个do |活动id|
学生。每个人都有学生id|
作业可能有问题,您可以尝试以下方法:
@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
@assignments.each do| assignment|
学生。每个人都有学生id|
@学生=用户。查找(学生id)
@学生队列将改变!
@student.queue我通过修改该块中的一行来唯一地抓取用户:
# 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
#将作业添加到学生队列
@作业。每项作业|
@student=User.find(assignment.assignment\u id)
@学生队列将改变!
@仍然使用此方法将student.queue作业保存到所有学生队列中。哦,抱歉,它实际上也在执行相同的操作。让我想想。那个控制器需要严格节食。@jvillian嘿,谢谢,你介意指出我可以做些什么来减肥,或者我应该避免吗?当然,把它作为一个单独的问题发布,我很乐意提供一些想法。