Hi all,
I am getting this bellow error
This is my code(method):
def self.generate_normal_report(batch_ids)
batches = Batch.find(:all,:conditions => {:id => batch_ids},:select => “id”)
batches.each do |batch|
exam_groups_main = batch.exam_groups
exam_scores_main = exam_groups_main.map(&:exams).flatten.compact.map(&:exam_scores).flatten.compact
archived_exam_scores_main = exam_groups_main.map(&:exams).flatten.compact.map(&:archived_exam_scores).flatten.compact
terms = batch.terms.map{|term| term.id.to_s}
students = batch.students.all(:select => “id,first_name,batch_id,user_id”)
student_ids = students.map(&:id)
archived_students = ArchivedStudent.all(:conditions => {:batch_id => batch.id},:select => “id,first_name,batch_id,former_id”)
student_ids.each do |student_id|
student_report = Hash.new
student = Student.find(student_id)
student_report[:term_report] = Hash.new
term_report = Hash.new
terms.each do |term|
exam_group_report = Hash.new
exam_groups = exam_groups_main.select{|exam_group| exam_group.term_id.to_s == term.to_s }
exam_groups.each do |exam_group|
exam_group_report[exam_group.id.to_s.to_sym] = Hash.new
exam_group_report[exam_group.id.to_s.to_sym][:exam_report] = Array.new
exams = exam_group.exams
exam_report = Hash.new
exams.each do |exam|
student_exam_score = exam_scores_main.select{|score| score.exam_id == exam.id and score.student_id == student.id}.first
student_mark = student_exam_score.nil? ? 0 :student_exam_score.marks
all_archived_score = archived_exam_scores_main.select{|score| score.exam_id == exam.id}.flatten.compact.map(&:marks)
all_normal_score = exam_scores_main.select{|score| score.exam_id == exam.id }.flatten.compact.map(&:marks)
all_score = (all_archived_score + all_normal_score).compact.sort.reverse
exam_position = all_score.index(student_mark).nil? ? all_score.size : (all_score.index(student_mark) + 1)
exam_report = {:subject_id => exam.subject.id,:exam_id => exam.id,:marks => student_mark,:maximum_marks => exam.maximum_marks,:exam_position => exam_position}
if all_score.size == 0
exam_report[:exam_average] = 0
else
exam_report[:exam_average] = (all_score.sum.to_f / all_score.size)
end
exam_group_report[exam_group.id.to_s.to_sym][:exam_report] << exam_report
end
class_information = ExamReport.calculate_class_position_and_class_average(exam_group,student,students,archived_students)
exam_group_report[exam_group.id.to_s.to_sym][:exam_group_position] = class_information[:rank]
exam_group_report[exam_group.id.to_s.to_sym][:exam_group_average] = class_information[:class_average]
exam_group_report[exam_group.id.to_s.to_sym][:exam_group_total] = class_information[:student_mark]
end
term_report[term.to_sym] = Hash.new
term_information = ExamReport.calculate_term_position_and_term_average(term,exam_groups,student,students,archived_students)
term_report[term.to_sym][:exam_group_report] = exam_group_report
term_report[term.to_sym][:term_position] = term_information[:rank]
term_report[term.to_sym][:term_average] = term_information[:class_average]
term_report[term.to_sym][:term_total] = term_information[:student_mark]
end
student_report[:term_report] = term_report
annual_information = ExamReport.calculate_annual_position_and_annual_average(student,students,archived_students,batch.terms)
student_report[:annual_position] = annual_information[:rank]
student_report[:annual_average] = annual_information[:class_average]
student_report[:annual_total] = annual_information[:student_mark]
exam_report = ExamReport.find_by_student_id(student_id)
full_report = Hash.new
full_report[:batch_id] = student.batch_id
full_report[:report] = student_report
report_array = Array.new
report_array << full_report
if student.graduated_batches.empty?
if exam_report.nil?
report_card = ExamReport.new(:student_id => student.id,:report_card => report_array)
report_card.save
report_card.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:combined_report] = Hash.new
report_card.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:combined_report] = self.prepare_combined_marksheet(student,batch_ids,student_report)
report_card.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:batch_combined_report] = Hash.new
report_card.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:batch_combined_report] = self.prepare_combined_marksheet(student,student.batch.id.to_a,student_report)
report_card.save
else
exam_report.destroy
report_card = ExamReport.new(:student_id => student.id,:report_card => report_array)
report_card.save
report_card.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:combined_report] = Hash.new
report_card.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:combined_report] = self.prepare_combined_marksheet(student,batch_ids,student_report)
report_card.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:batch_combined_report] = Hash.new
report_card.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:batch_combined_report] = self.prepare_combined_marksheet(student,student.batch.id.to_a,student_report)
report_card.save
end
else
unless exam_report.nil?
if exam_report.report_card.select{|report| report[:batch_id] == student.batch.id}.empty?
exam_report.report_card << full_report
exam_report.save ///HERE I AM UNABLE TO SAVE IT
exam_report.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:combined_report] = Hash.new
exam_report.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:combined_report] = self.prepare_combined_marksheet(student,batch_ids,student_report)
exam_report.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:batch_combined_report] = Hash.new
exam_report.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:batch_combined_report] = self.prepare_combined_marksheet(student,student.batch.id.to_a,student_report)
exam_report.save
else
exam_report.report_card.delete_if{|report| report[:batch_id] == student.batch.id}
exam_report.report_card << full_report
exam_report.save
exam_report.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:combined_report] = Hash.new
exam_report.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:combined_report] = self.prepare_combined_marksheet(student,batch_ids,student_report)
exam_report.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:batch_combined_report] = Hash.new
exam_report.report_card.select{|r| r[:batch_id] == student.batch.id}.first[:batch_combined_report] = self.prepare_combined_marksheet(student,student.batch.id.to_a,student_report)
exam_report.save
end
else
report_card = ExamReport.new(:student_id => student.id,:report_card => report_array)
end
end
end
end
end
No method error undefined method `each’ for nil:NilClass
NoMethodError (undefined method each' for nil:NilClass): /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:40:in
to_yaml’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:39:in map' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:39:in
to_yaml’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in call' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in
emit’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in quick_emit' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:38:in
to_yaml’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:18:in node_export' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:18:in
add’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:18:in to_yaml' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:17:in
each’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:17:in to_yaml' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:16:in
map’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:16:in to_yaml' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in
call’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in emit' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in
quick_emit’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:15:in to_yaml' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:18:in
node_export’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:18:in add' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:18:in
to_yaml’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:17:in each' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:17:in
to_yaml’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:16:in map' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:16:in
to_yaml’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in call' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in
emit’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in quick_emit' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:15:in
to_yaml’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:41:in node_export' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:41:in
add’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:41:in to_yaml' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:40:in
each’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:40:in to_yaml' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:39:in
map’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:39:in to_yaml' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in
call’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in emit' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in
quick_emit’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:38:in to_yaml' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:110:in
node_export’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:110:in add' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:110:in
to_yaml’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:109:in each' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:109:in
to_yaml’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:108:in seq' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:108:in
to_yaml’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in call' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in
emit’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in quick_emit' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:107:in
to_yaml’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:41:in node_export' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:41:in
add’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:41:in to_yaml' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:40:in
each’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:40:in to_yaml' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:39:in
map’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:39:in to_yaml' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in
call’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in emit' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in
quick_emit’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:38:in to_yaml' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:41:in
node_export’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:41:in add' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:41:in
to_yaml’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:40:in each' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:40:in
to_yaml’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:39:in map' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:39:in
to_yaml’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in call' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in
emit’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in quick_emit' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:38:in
to_yaml’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:110:in node_export' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:110:in
add’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:110:in to_yaml' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:109:in
each’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:109:in to_yaml' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:108:in
seq’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:108:in to_yaml' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in
call’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in emit' /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml.rb:391:in
quick_emit’
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/yaml/rubytypes.rb:107:in to_yaml' app/models/exam_report.rb:89:in
generate_normal_report’
app/models/exam_report.rb:15:in each' app/models/exam_report.rb:15:in
generate_normal_report’
app/models/exam_report.rb:7:in each' app/models/exam_report.rb:7:in
generate_normal_report’
app/controllers/exam_reports_controller.rb:73:in normal_report_generation' passenger (3.0.9) lib/phusion_passenger/rack/request_handler.rb:96:in
process_request’
passenger (3.0.9) lib/phusion_passenger/abstract_request_handler.rb:513:in accept_and_process_next_request' passenger (3.0.9) lib/phusion_passenger/abstract_request_handler.rb:274:in
main_loop’
passenger (3.0.9) lib/phusion_passenger/classic_rails/application_spawner.rb:321:in start_request_handler' passenger (3.0.9) lib/phusion_passenger/classic_rails/application_spawner.rb:275:in
send’
passenger (3.0.9) lib/phusion_passenger/classic_rails/application_spawner.rb:275:in handle_spawn_application' passenger (3.0.9) lib/phusion_passenger/utils.rb:479:in
safe_fork’
passenger (3.0.9) lib/phusion_passenger/classic_rails/application_spawner.rb:270:in handle_spawn_application' passenger (3.0.9) lib/phusion_passenger/abstract_server.rb:357:in
send’
passenger (3.0.9) lib/phusion_passenger/abstract_server.rb:357:in server_main_loop' passenger (3.0.9) lib/phusion_passenger/abstract_server.rb:206:in
start_synchronously’
passenger (3.0.9) lib/phusion_passenger/abstract_server.rb:180:in start' passenger (3.0.9) lib/phusion_passenger/classic_rails/application_spawner.rb:149:in
start’
passenger (3.0.9) lib/phusion_passenger/spawn_manager.rb:219:in spawn_rails_application' passenger (3.0.9) lib/phusion_passenger/abstract_server_collection.rb:132:in
lookup_or_add’
passenger (3.0.9) lib/phusion_passenger/spawn_manager.rb:214:in spawn_rails_application' passenger (3.0.9) lib/phusion_passenger/abstract_server_collection.rb:82:in
synchronize’
passenger (3.0.9) lib/phusion_passenger/abstract_server_collection.rb:79:in synchronize' passenger (3.0.9) lib/phusion_passenger/spawn_manager.rb:213:in
spawn_rails_application’
passenger (3.0.9) lib/phusion_passenger/spawn_manager.rb:132:in spawn_application' passenger (3.0.9) lib/phusion_passenger/spawn_manager.rb:275:in
handle_spawn_application’
passenger (3.0.9) lib/phusion_passenger/abstract_server.rb:357:in __send__' passenger (3.0.9) lib/phusion_passenger/abstract_server.rb:357:in
server_main_loop’
passenger (3.0.9) lib/phusion_passenger/abstract_server.rb:206:in `start_synchronously’
passenger (3.0.9) helper-scripts/passenger-spawn-server:99