Ruby on Rails Monday, August 19, 2013

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

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/621af32a-f498-4869-a6af-036d6af36ce6%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

No comments:

Post a Comment