2013-09-15 5 views
0

Я не могу понять, почему чемпион Гермиона сначала и после перерыва, чемпионы становятся ноль ... Есть ли проблема с использованием перерыва?«Перерыв» удалить назначенную переменную?

вот мой код:

def pair(users_with_meeting, paired_users, ordered_keys,week)  

    ordered_keys.each do |key|  
    candidates = users_with_meeting[key] - paired_users 
    unless candidates.empty? 
     champion = candidates.first 
     puts "ok" 
     puts champion.inspect.to_s 
     break  
    end  
    end 

    puts champion.inspect.to_s 

    if champion 
    meetings.create! week: week, paired_user: champion 
    champion.meetings.create! week: week, paired_user: self 
    else 
    [] 
    end 

end 

и вот что появляется в моем терминале:

Run options: include {:locations=>{"./spec/models/user_spec.rb"=>[117]}} 
ok  
#<User id: 1265, email: "[email protected]", first_name: "Hermione", last_name: "Granger", uid: "[email protected]", active: true, admin: false, created_at: "2013-09-15 18:09:16", updated_at: "2013-09-15 18:09:16", reset_date: "2013-04-22"> 
F 

Failures: 

    1) test 
    Failure/Error: ginny.pair(User.with_meeting_for(week[1]), [], User.with_meeting_for(week[1]).keys.sort.reverse, week[2]) 
    NameError: 
     undefined local variable or method `champion' for #<User:0x007f85189179f0> 
    # ./app/models/user.rb:64:in `pair' 
    # ./spec/models/user_spec.rb:133:in `block (2 levels) in <top (required)>' 
+1

Спросите себя: где заканчивается моя 'функция pair'? – raina77ow

+1

Пожалуйста, вставьте весь код метода 'pair'. Было бы лучше, если бы он также был правильно отстроен. –

+0

Хорошо, я только что добавил – borisn9

ответ

0

Вы имеете эту ошибку, потому что вы определяете champion локальную переменную внутри объема, связанного с блоком вы перейдите в метод each. Вне этого блока значение переменной становится nil. Чтобы предотвратить это, вы могли бы предопределить переменную перед вызовом each метод, как это:

def pair(users_with_meeting, paired_users, ordered_keys,week) 
    champion = '' 
    ordered_keys.each do |key|  
    candidates = users_with_meeting[key] - paired_users 
    unless candidates.empty? 
     champion = candidates.first 
     puts "ok" 
     puts champion.inspect.to_s 
     break  
    end  
    end 
    puts champion.inspect.to_s 
    if champion 
    meetings.create! week: week, paired_user: champion 
    champion.meetings.create! week: week, paired_user: self 
    else 
    [] 
    end 
end 
+0

спасибо за ваш ответ, он работает – borisn9

Смежные вопросы