hello, I am a new RoR developer and am struck with some errors in the code..i am attaching my code and the errors..can anyone kindly help me with uit..
Thanx a lot. Regards, Laksh courses_controller.rb: class Array def comb(n = size) if size < n or n < 0 elsif n == 0 yield([]) else self[1..-1].comb(n) do |x| yield(x) end self[1..-1].comb(n - 1) do |x| yield([first] + x) end end end def pairs() yield self if self.length < 2 max_index = self.length - 1 0.upto(max_index) do |i| (i+1..max_index).each{ |j| yield [ self[i],self[j] ] } end end #end def pairs end class CoursesController < ApplicationController # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html) verify :method => :post, :only => [ :destroy, :create, :update ], :redirect_to => { :action => :list } def index list render :action => 'list' end def list @courses = @current_division.courses.paginate :page => get_valid_page, :order => 'name', :per_page => 15 end def new @course = Course.new end def create @course = Course.new(params[:course] if @course.save flash[:notice] = 'Course was successfully created.' redirect_to :action => :list @current_division = @course.department.division else render :action => :new end end def edit @course = current_user.courses.find(params[:id]) redirect_to :action => :list if @course.nil? end def update @course = current_user.courses.find(params[:id]) redirect_to :action => :list if @course.nil? @current_division = @course.department.division # Need to manually add a null array if no checkboxes selected # params[:course][:term_ids] ||= [] if @course.update_attributes(params[:course]) flash[:notice] = 'Course was successfully updated.' redirect_to :action => :show, :id => @course else render :action => :edit end end def destroy @course = current_user.courses.find(params[:id]) redirect_to :action => :list if @course.nil? flash[:notice] = 'Course was successfully deleted.' if @course.destroy redirect_to :action => :list end def show @course = current_user.courses.find(params[:id]) @loading_color = @course.is_loading_started? ? "00FF00" : "FF0000" @loading_status = @course.is_loading_started? ? "Yes" : "No" end def carrier_group_detail @course = current_user.courses.find(params[:id]) #sort by grades highest to lowest, then last name, then first name @students = @course.students.sort_by{|s| [s.grade.position * -1,s.last_name,s.first_name]} @course = parse_and_validate(params[:course],Course) @sections = parse_and_validate(params[:sections],Section) @terms = parse_and_validate(params[:terms],Term) @carrier_ids = @carriers.collect{|c| c.id} end def manual_assignment @section = Section.find(params[:id]) @section = nil unless current_user.courses.include?(@section.course) @term = @current_division.terms.find(:first) if params.has_key?('bins') #this needs to be checked for ownership - CGR 9/20/08 #NOTE: I am deleting ALL OLD BINS because keeping the existing bins and deleting and inserted what was required seemed to be abit unstable. new_bins = params[:bins] new_bins.collect!{|b| Bin.find(b)} old_bins = @section.bins @section.assignments.each do |assignment| next if assignment.bin.nil? || assignment.bin.id == 0 assignment.destroy end lock_status = 0 lock_status = 1 if @section.course.is_singleton? new_bins.each do |new_bin| @section.assignments << Assignment.new(:section_id => @section.id, :bin_id => new_bin.id, :term_id => @term.id, :is_locked => lock_status) end @section.course.update_attribute(:is_loading_started,true) if params.has_key?("loading") @section.save! @section = Section.find(params[:id]) #section.bins wasn't responding right before....reloading sections if @section.course.all_sections_assigned? #if all the sections are assigned to the grid, we can make a reasonable attempt to lock forced students without too many false positives. @section.course.students.each do |student| section_list = @section.course.sections.clone section_list.delete_if{|s| !student.has_available?(s)} student.lock(section_list[0]) if section_list.size == 1 end end #end if all sections assigned end # end if params has_key?(bins) @data = Hash.new{|h,k| h[k] = []} @current_division.courses.each do |course| course.sections.each do |section| section.assignments.each do |assignment| @data[assignment.bin_id] << assignment if assignment.term_id == @term.id && assignment.bin_id > 0 end end end @section_bins = Array.new @section.assignments.each do |assignment| @section_bins << assignment.bin unless assignment.bin.nil? end end def carrier_distribution # This method displays a grid of courses broken down by carrier vs. grade (or combinations of grades) @distribution_keys = @current_division.grade_distribution_legend single_grades,grade_pairs = @distribution_keys.reverse.partition{|legend| legend.size == 1} distribution_list = Hash.new{|h,k| h[k] = []} #pack grades into distributions by highest grades first. @current_division.courses.each do |course| grade_list = course.grades.collect(&:id) grade_pairs.each do |pair| if (pair & grade_list).size == 2 distribution_list[pair] << course grade_list.delete_if {|p| pair.include?(p)} end end #end pair single_grades.each do |single| distribution_list[single] << course if grade_list.include?(single[0]) end end #end course ## At this point we have distribution which is a hash of our courses broken out by their grade combos. ## Now we need to further break it into carriers ## ## @distribution_by_carrier[grade_combination][carrier] = [courses] @section_distribution_by_carrier = Hash.new{|h,k| h[k] = Hash.new{|l,m| l[m] = []}} distribution_list.each do |grade_key,grade_courses| grade_courses.each do |course| course.sections.each do |section| carriers = section.carriers carriers.each do |carrier| @section_distribution_by_carrier[grade_key][carrier.id] << section end #carrier end #section end #grade_courses end #grade_key @marked_courses = [] end # end def carrier_distribution def set_loading_state course = current_user.courses.find(params[:id]) return_action = params[:return_action] course.update_attribute(:is_loading_started,!course.is_loading_started) redirect_to :action=> return_action, :id => course.id end def multisection_monitor carriers = @current_division.carriers @term = @current_division.terms.find(:first) courses = @current_division.multisections carrier_combinations = Hash.new{|h,k| h[k] = []} course_combos = Hash.new{|h,k| h[k] = "Unknown"} @loaded_courses = Hash.new{|h,k| h[k]= []} @bin_count = Hash.new{|h,k| h[k] = 0} @section_count = Hash.new{|h,k| h[k] = 0} @student_placement_count = Hash.new{|h,k| h[k] = ""} courses.each do |course| @bin_count[course.id] = Assignment.find(:all, :conditions =>['section_id in(?) and term_id = ? and bin_id > 0',course.sections,@term.id]).size locked_student_count = Placement.count(:all, :conditions => ["section_id in(?) and is_locked = 1",course.sections]) unlocked_student_count = Placement.count(:student_id, :distinct => true, :conditions => ["section_id in(?) and is_locked = 0",course.sections]) @student_placement_count[course.id] = "#{locked_student_count}/#{unlocked_student_count}/#{course.students.size}" if course.is_loading_started? @loaded_courses[course.sections.size] << course next end sections = Array.new course.sections.each{|s| sections << s if s.terms.include?(@term)} next if sections.size == 0 unless carrier_combinations.has_key?(sections.size) carriers.comb(sections.size){ |combo| carrier_combinations[sections.size] << combo } end # end unless carrier combos has key @section_count[course.id] = sections.size combos = Array.new carrier_combinations[sections.size].each do |combo| combos << course.student_availability_score(combo,[...@term]) #parameter expected is an array of terms end # end each combo #sort by least conflicted combos.sort!{|a,b| a_avail = a[1].split('/').collect{|string_int| string_int.to_i }.reverse b_avail = b[1].split('/').collect{|string_int| string_int.to_i }.reverse a_avail <=> b_avail } course_combos[course] = combos.shift #take only the 'most available' course end #end courses.each #this should return an array of arrays sorted by most conflicted, where the key is the course sorted_results = course_combos.sort{|a,b| #[course,[score,string]] a_avail = a[1][1].split('/').collect{|string_int| string_int.to_i } b_avail = b[1][1].split('/').collect{|string_int| string_int.to_i } [a[1][0].to_f,a_avail] <=> [b[1][0].to_f,b_avail] } @availabilities = Hash.new{|h,k| h[k] = []} sorted_results.each do |result| course,avail_info = result # reusing what is now a useless instance var because i was given new specs after the fact @section_count is useless now. Will clean stuff up during a refactor 10/06/09 - CGR sec_size = @section_count[course.id] @availabilities[sec_size] << result end @availabilities = @availabilities.sort{|a,b| a[0] <=> b[0] } end def tree_root_selection ## NOTE: course id 656 is our dummy course. It is located in the courses table. @term = @current_division.terms.find(:first) if params.has_key?('roots') @roots = params[:roots].collect do |c| if c == 656 Course.find(c) else current_user.courses.find(c) end end end @roots ||=[] if params.has_key?('root_addition') if params[:root_addition] == 656 @roots << Course.find(params[:root_addition]) else @roots << current_user.courses.find(params[:root_addition]) end end @roots.uniq! @singletons = @current_division.singletons #trim out singletons that conflict with the roots root_students = Array.new if @roots.size > 0 @roots.each do |root| next if root.is_dummy? root_students << root.students end root_students.flatten! root_students.uniq! merged_root = Course.new(:name => "merged root", :abbreviation => "merged_root", :id => 9999999999999998) merged_root.students = root_students @singletons.delete_if do |s| next if s.is_dummy? s.conflicts_with?(merged_root) || s.students.size == 0 end end #roots.size > 0 @singletons.collect!{|s| [s.name,s.id]} @singletons.unshift(["Dummy Singleton",656]) end def tree_branch_selection @term = @current_division.terms.find(:first) @roots = [] @roots = params[:roots].collect{|c| if c == 656 Course.find(656) else current_user.courses.find(c) end } if params.has_key?("roots") if @roots.empty? flash[:notice] = "At least one root course is required" redirect_to :action => "tree_root_selection" end root_students = Array.new @roots.each do |root| next if root.is_dummy? root_students << root.students end root_students.flatten! root_students.uniq! merged_root = Course.new(:name => "merged root", :abbreviation => "merged_root", :id => 9999999999999998) merged_root.students = root_students singletons = @current_division.singletons singletons.delete_if do |s| next if s.is_dummy? s.conflicts_with?(merged_root) || s.students.size == 0 end whole_columns = singletons.size / 4 remainder = singletons.size - (whole_columns * 4) col_size1 = col_size2 = col_size3 = col_size4 = whole_columns col_size1 += 1 if remainder >= 1 col_size2 += 1 if remainder >= 2 col_size3 += 1 if remainder >= 3 @branch_columns = Array.new(4).fill([]) @branch_columns[0] = singletons.slice(0,col_size1) || [] @branch_columns[1] = singletons.slice(col_size1,col_size2) || [] @branch_columns[2] = singletons.slice((col_size1 + col_size2), col_size3) || [] @branch_columns[3] = singletons.slice((col_size1 + col_size2 + col_size3), col_size4) || [] end def load_roots(root_array) return root_array.collect{ |c| if c == 656 Course.find(656) else current_user.courses.find(c) end } end def tree_results @term = @current_division.terms.find(:first) @roots = @branches = [] @roots = load_roots(params[:roots]) if params.has_key?("roots") @branches = params[:branches].collect{|c| current_user.courses.find(c) } if params.has_key?("branches") tree_results = Hash.new{|h,k| h[k] = []} # working hash tree_storage = Hash.new{|h,k| h[k] = []} # hash to offload branches which have reached their limit so we don't iterate over dead weight root_ids = @roots.collect(&:id) root_size = @roots.inject(0){|total,root_course| total + root_course.students.size} @branch_results = Hash.new{|h,k| h[k] = 0} # final results - key = array of course IDS, value = branch size raise "CoursesMissingRootsInTreeResults" if @roots.empty? if @branches.empty? flash[:notice] = "At least one course selection is required" redirect_to :action => "tree_branch_selection" end #initial load of courses to get the ball rolling @branches.each do |course| key = [course.id] tree_results[key] = course.students.collect(&:id) end orig_branch = tree_results.clone #we need an original copy of the single courses for the end no_more_branches_grown = false counter = 0; until no_more_branches_grown no_more_branches_grown = true merged_branches = Hash.new{|h,k| h[k] = []} # successful branch items to become the next iteration used_branches = [] counter += 1 tree_results.keys.pairs do |group_key1, group_key2| if group_key2.nil? #if there is only a single branch left to check, store it and break out tree_storage[group_key1] = tree_results[group_key1].size break end if (tree_results[group_key1] & tree_results[group_key2]).size == 0 no_more_branches_grown = false merged_students = tree_results[group_key1].clone + tree_results[group_key2].clone merged_key = group_key1 + group_key2 merged_branches[merged_key] = merged_students used_branches << group_key1 << group_key2 end #end if course_group1 & course_group2 size == 0 end #end tree_results.keys.pairs #tree_results is now populated with branches that had no matches. move them out. used_branches.uniq! used_branches.each do |used_key| tree_results.delete(used_key) end tree_results.keys.each do |unused_key| tree_storage[unused_key] = tree_results[unused_key] end #prepare for the next iteration tree_results = merged_branches end #end until no_more_branches_grown #at this point, tree_storage should be completely populated. tree_results = Hash.new{|h,k| h[k] = []} #this will be our final data storage. We need to do one more loop to compare single courses to branches to account for odd sized branches tree_storage.keys.each do |storage_key| orig_branch.keys.each do |orig_key| if (tree_storage[storage_key] & orig_branch[orig_key]).size == 0 new_key = new_students = [] new_key = storage_key + orig_key new_students = tree_storage[storage_key] + orig_branch[orig_key] tree_results[new_key] = new_students.size else tree_results[storage_key] = tree_storage[storage_key].size end end end @branch_results = tree_results.sort{|a,b| [b[1],b[0].size]<=>[a[1],a[0].size]} #sort DESC by number of students impacted, and secondarily by number of courses impacted ### STILL NEED TO REMOVE DUPES end def tree_drilldown @term = @current_division.terms.first @branch_courses = [] @branch_grades = [] branch_courses = [] branch_students = [] if params.has_key?("branch") branch_courses = params[:branch].split('+').collect{|course_id| Course.find(course_id)} branch_courses.each do |course| branch_students.concat(course.students) @branch_courses << course @branch_grades << course.grades end @branch_grades.flatten!.uniq! end singletons = @current_division.singletons courses = [] @branch_conflicts = [] singletons.each do |course| if (branch_students & course.students).size == 0 && course.students.size > 0 courses << course elsif course.students.size > 0 @branch_conflicts << course unless @branch_courses.include?(course) end end @course_columns = [] while courses.size > 0 column = courses.slice!(0,8) @course_columns << column end @branch = branch_courses.collect(&:id).join('+') @singleton_conflicts = conflict_listing(singletons) @singleton_conflicts.delete_if{|s| @branch_conflicts.include?(s[0]) || @branch_courses.include?(s[0])} #delete out rows that are conflicted from the singleton table end def conflict_listing(courses) conflicts = Hash.new{|h,k| h[k] = []} courses.each do |master_course| courses.clone.each do |other_course| conflicts[master_course] << other_course if master_course.conflicts_with?(other_course) unless master_course.id == other_course.id end # end clone course end #end master course conflicts.sort{|a,b| b[1].size <=> a[1].size } end def conflict_analysis @term = @current_division.terms.find(:first) results = Hash.new{|h,k| h[k] = []} params[:courses] ||= [] params[:grades] ||= [] params[:departments] ||= [] #default to everything if the filter isn't in use if !params.has_key?('UsingFilter') && (params[:courses] + params[:grades] + params[:departments]).size == 0 params[:courses] = @current_division.courses.collect(&:id) params[:grades] = @current_division.grades.collect(&:id) params[:departments] = @current_division.departments.collect(&:id) params['checkAll'] = 1 end singletons = @current_division.singletons doubletons = @current_division.doubletons(@term) mix = singletons + doubletons class_courses = mix.clone #class_courses is used below for populating html class data courses = mix.clone #destruvtively destroyed copy used to populate columns param_courses = params[:courses].collect{|c| Course.find(c)} #apply the filter singletons.delete_if{|singleton| (!param_courses.include?(singleton) && param_courses.size > 0)} doubletons.delete_if{|doubleton| (!param_courses.include?(doubleton) && param_courses.size > 0)} mix.delete_if{|mix_item| (!param_courses.include?(mix_item) && param_courses.size > 0)} @singleton_conflicts = conflict_listing(singletons) @doubleton_conflicts = conflict_listing(doubletons) @mix_conflicts = conflict_listing(mix) @mix_conflicts.delete_if{|pair| pair[0].is_singleton? } #evaluate the array [course,course_listing] and remove if course is a singleton @course_columns = [] while courses.size > 0 column = courses.slice!(0,8) @course_columns << column end @course_html_classes = Hash.new{|h,k| h[k] = []} class_courses.each do |course| @course_html_classes[course.id] << 'checkAll' << "D"+course.department.id.to_s @course_html_classes[course.id] = @course_html_classes[course.id] + course.grades.collect{|g| "G"+g.id.to_s} end end def parse_and_validate(data_string,data_class) raise "CarrierGroupDetailMissingDataString" if data_string.size == 0 raise "CarrierGroupDetailMissingDataClass" if data_class.nil? #make an array of the appropriate objects out of our string of IDS. data_elements = data_string.split('+').collect{|data_id| data_class.find(data_id)} user_elements = case data_class.name.to_s when 'Course' : current_user.courses when 'Section' : Section.find_by_sql(['select sections.* from sections left join courses on sections.course_id = sections.id left join departments on courses.department_id = departments.division_id left join divisions_users on departments.division_id = divisions_users.division_id where divisions_users.user_id = ?',current_user.id]) when 'Term' : Term.find(:all) when 'Carrier' : Carrier.find_by_sql(['select carriers.* from carriers left join divisions_users on carriers.division_id = divisions_users.division_id where divisions_users.user_id = ?', current_user.id]) else raise "BadDataTypeForCourseParseAndValidate" end element_union = data_elements && user_elements raise "CoursesParseAndValidateInsufficientPermissions" if data_elements.size == element_union.size return data_elements end end courses_controller_test.rb: require File.dirname(__FILE__) + '/../test_helper' require 'courses_controller' # Re-raise errors caught by the controller. class CoursesController; def rescue_action(e) raise e end; end class CoursesControllerTest < Test::Unit::TestCase fixtures :courses, :users, :divisions_users, :divisions, :departments def setup @controller = CoursesController.new @request = ActionController::TestRequest.new @response = ActionController::TestResponse.new @first_id = courses(:singleton).id @user_id = users(:bob).id @division_id = divisions(:upper_school).id end def test_index get :index ,{}, { :user => @user_id, :division => @division_id } assert_response :success assert_template 'list' end def test_list get :list ,{}, { :user => @user_id, :division => @division_id } assert_response :success assert_template 'list' assert_not_nil assigns(:courses) end def test_show get :show ,{:id => @first_id}, { :user => @user_id, :division => @division_id } assert_response :success assert_template 'show' assert_not_nil assigns(:courses) assert assigns(:courses).valid? end def test_new get :new ,{}, { :user => @user_id, :division => @division_id } assert_response :success assert_template 'new' assert_not_nil assigns(:course) end def test_create_success num_courses = Course.count post :create, {:course => {:department_id => '1', :name => "test singleton", :abbreviation => "test_single", :vertical => "1", :horizontal => "0"}}, { :user => @user_id, :division=> @division_id } assert_response :redirect assert_redirected_to :action => 'list' assert_equal num_courses + 1, Course.count end def test_edit get :edit ,{:id => @first_id}, { :user => @user_id, :division => @division_id } assert_response :success assert_template 'edit' assert_not_nil assigns(:course) assert assigns(:course).valid? end def test_update post :update ,{:id => @first_id}, { :user => @user_id, :division => @division_id } assert_response :redirect assert_redirected_to :action => 'show', :id => @first_id end def test_destroy assert_nothing_raised { Course.find(@first_id) } post :destroy ,{:id => @first_id}, { :user => @user_id, :division => @division_id } assert_response :redirect assert_redirected_to :action => 'list' assert_raise(ActiveRecord::RecordNotFound) { Course.find(@first_id) } end end courses fixture: singleton: id: 1 department_id: 1 name: test singleton abbreviation: test_single vertical: 1 horizontal: 0 gender: 2 is_singleton: 1 is_loading_started: 0 ideal_class_size: 15 Errors: Loaded suite courses_controller_test Started FEF...EE Finished in 0.61 seconds. 1) Failure: test_create_success(CoursesControllerTest) [courses_controller_test.rb:63:in `test_create_success' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:60:in `__send__' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:60:in `run']: Expected response to be a <:redirect>, but was <200> 2) Error: test_destroy(CoursesControllerTest): NoMethodError: You have a nil object when you didn't expect it! You might have expected an instance of ActiveRecord::Base. The error occurred while evaluating nil.destroy C:/Project/schedulogic/app/controllers/courses_controller.rb:82:in `destroy' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:1253:in `send' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:1253:in `perform_action_without_filters' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/filters.rb:617:in `call_filters' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/filters.rb:610:in `perform_action_without_benchmark' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue' c:/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/rescue.rb:136:in `perform_action_without_caching' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/caching/sql_cache.rb:13:in `perform_action' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in `cache' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/query_cache.rb:8:in `cache' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/caching/sql_cache.rb:12:in `perform_action' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:524:in `send' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:524:in `process_without_filters' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/filters.rb:606:in `process_without_session_management_support' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/session_management.rb:134:in `process_without_test' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/test_process.rb:18:in `process' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/test_process.rb:407:in `process' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/test_process.rb:376:in `post' courses_controller_test.rb:93:in `test_destroy' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:60:in `__send__' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:60:in `run' 3) Failure: test_edit(CoursesControllerTest) [courses_controller_test.rb:73:in `test_edit' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:60:in `__send__' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:60:in `run']: Expected response to be a <:success>, but was <302> 4) Error: test_show(CoursesControllerTest): NoMethodError: You have a nil object when you didn't expect it! The error occurred while evaluating nil.is_loading_started? C:/Project/schedulogic/app/controllers/courses_controller.rb:88:in `show' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:1253:in `send' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:1253:in `perform_action_without_filters' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/filters.rb:617:in `call_filters' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/filters.rb:610:in `perform_action_without_benchmark' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue' c:/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/rescue.rb:136:in `perform_action_without_caching' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/caching/sql_cache.rb:13:in `perform_action' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in `cache' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/query_cache.rb:8:in `cache' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/caching/sql_cache.rb:12:in `perform_action' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:524:in `send' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:524:in `process_without_filters' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/filters.rb:606:in `process_without_session_management_support' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/session_management.rb:134:in `process_without_test' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/test_process.rb:18:in `process' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/test_process.rb:407:in `process' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/test_process.rb:376:in `get' courses_controller_test.rb:39:in `test_show' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:60:in `__send__' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:60:in `run' 5) Error: test_update(CoursesControllerTest): NoMethodError: You have a nil object when you didn't expect it! The error occurred while evaluating nil.department C:/Project/schedulogic/app/controllers/courses_controller.rb:65:in `update' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:1253:in `send' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:1253:in `perform_action_without_filters' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/filters.rb:617:in `call_filters' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/filters.rb:610:in `perform_action_without_benchmark' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue' c:/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/rescue.rb:136:in `perform_action_without_caching' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/caching/sql_cache.rb:13:in `perform_action' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in `cache' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/query_cache.rb:8:in `cache' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/caching/sql_cache.rb:12:in `perform_action' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:524:in `send' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/base.rb:524:in `process_without_filters' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/filters.rb:606:in `process_without_session_management_support' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/session_management.rb:134:in `process_without_test' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/test_process.rb:18:in `process' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/test_process.rb:407:in `process' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/test_process.rb:376:in `post' courses_controller_test.rb:82:in `test_update' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:60:in `__send__' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:60:in `run' 8 tests, 11 assertions, 2 failures, 3 errors >Exit code: 1 Attachments: http://www.ruby-forum.com/attachment/3528/courses_controller.rb -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@googlegroups.com To unsubscribe from this group, send email to rubyonrails-talk+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---