2017-06-07 2 views
-3

Der folgende Code wird ausgeführt, bevor das Modell gespeichert wird. Es überprüft eine has_many Assoziation auf Änderung vor dem Durchschleifen und setzt einen Wert auf jeder. Es prüft jede Antwortoption, ob die correct_answer bei einer der Antworten geändert wird. Wenn ja, sucht es nach dem was geändert wurde und war true.Eine Methode vereinfachen oder verbessern

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 

Wie könnte ich diese Methode vereinfachen oder verbessern?

Antwort

1

den Code Angenommen, Sie freigegeben haben funktioniert, würde ich es trocknen ein bisschen wie oben ..

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} 'das sieht komisch aus, was versuchst du hier zu machen? –

+0

@ Md.FarhanMemon Er setzt den 'false' Wert zurück, der zugewiesen wird, wenn keine 'Antwort_Option' vorhanden ist, die' answer_option.correct_answer_changed? 'Erfüllt. Im ursprünglichen Code war dafür eine Bedingung. – sawa

Verwandte Themen