我的AssignmentsController中有一個batch_create
方法,允許Assigners一次將賦值分配給多個學生。這將assignment_id
保存到每個學生的隊列字段中。 assignment_id
被序列化爲JSON並作爲數組存儲在每個學生的隊列字段中。使用Rails 4中的嵌套循環一次創建多個對象
我的問題是,當前使用batch_create
進行質量分配分配時,學生隊列中的相同assignment_ids最終會出現。我需要爲每個batch_create方法只爲每個學生的隊列分配一個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
該控制器需要去一個** **嚴重的飲食。 – jvillian
@jvillian嘿謝謝,你介意指出我可以做些什麼來減少它或我應該避免? – gnycl
當然,把它作爲一個單獨的問題發佈,我很樂意提供想法。 – jvillian