2017-06-07 9 views
-3

次のコードは、モデルを保存する前に実行されます。ループの前に変更のためにhas_manyアソシエーションをチェックし、それぞれに値を設定します。各回答オプションで、いずれかの回答でcorrect_answerが変更されているかどうかを確認します。そうであれば、どちらが変更されたかを調べ、trueでした。メソッドの簡略化または改善

if self.answer_options.select{|a| a.correct_answer_changed?}.any? 
    self.answer_options.each do |answer_option| 
    if answer_option.correct_answer_changed? && !answer_option.correct_answer_was 
     answer_option.correct_answer = true 
    else 
     answer_option.correct_answer = false 
    end 
    end 
end 

どうすればこの方法を簡略化できますか?あなたが働いている共有しているコードを仮定し

答えて

1

、私は少しそれを乾かします。..

self.answer_options.map{|a| a if a.correct_answer_changed?}.compact.each do |answer_option| 
    answer_option.toggle(:correct_answer) 
end 
0
answer_options.each do |answer_option| 
    answer_option.correct_answer = 
    answer_option.correct_answer_changed? && !answer_option.correct_answer_was 
end 
if answer_options.all?{|answer_option| answer_option.correct_answer == false} 
    answer_options.each{|answer_option| answer_option.correct_answer == nil} 
end 
+0

'answer_options.each {| answer_option | answer_option.correct_answer == nil} 'これは奇妙に見えますが、ここで何をしようとしていますか? –

+0

@ Md.FarhanMemon 'answer_option.correct_answer_changed? 'を満たす' answer_option'がないときに割り当てられた 'false'値を元に戻します。元のコードでは、そのための条件がありました。 – sawa

関連する問題