Help refactoring

Hello,

I’m learning rails and starting to try to refactor code that repeats
itself…

I have several lines of code like the following and wonder if there is a
more efficient way to do this. Any suggestions would be greatly
appreciated as one example would help me figure out how to refactor alot
of my code.

if @formatted_question[:anno_a].length < 2
@formatted_question[:anno_a] = @question[:correct_anno]
end
if @formatted_question[:anno_b].length < 2
@formatted_question[:anno_b] = @question[:correct_anno]
end
if @formatted_question[:anno_c].length < 2
@formatted_question[:anno_c] = @question[:correct_anno]
end
if @formatted_question[:anno_d].length < 2
@formatted_question[:anno_d] = @question[:correct_anno]
end
if @formatted_question[:anno_e].length < 2
@formatted_question[:anno_e] = @question[:correct_anno]
end

@formatted_question.each_pair do |key, value|
@formatted_question[key] = @question[:correct_anno] if value.length <
2
end


Dheeraj K.

Dheeraj K. wrote in post #1114259:

@formatted_question.each_pair do |key, value|
@formatted_question[key] = @question[:correct_anno] if value.length <
2
end


Dheeraj K.

Thanks!!

[:anno_a, :anno_b, :anno_c, :anno_d].each do |key|
@formatted_question[key] = @question[:correct_anno] if
@formatted_question[key].length < 2
end


Dheeraj K.

Dave C. wrote in post #1114260:

Dheeraj K. wrote in post #1114259:

@formatted_question.each_pair do |key, value|
@formatted_question[key] = @question[:correct_anno] if value.length <
2
end


Dheeraj K.

Thanks!!

Oops, that will not work as the hash contains other attributes…
formatted = {
#id: self.id,
#complete_question: “\r#{question} \r\r\r A.
#{answer_list[0][0]}\r\r B. #{answer_list[1][0]}\r\r C.
#{answer_list[2][0]}\r\r D. #{answer_list[3][0]}\r\r E.
#{answer_list[4][0]}\r”,
correct_answer: self.correct_ans_1,
answer_a: answer_list[0][0],
answer_b: answer_list[1][0],
answer_c: answer_list[2][0],
answer_d: answer_list[3][0],
answer_e: answer_list[4][0],
anno_a: answer_list[0][1],
anno_b: answer_list[1][1],
anno_c: answer_list[2][1],
anno_d: answer_list[3][1],
anno_e: answer_list[4][1],
anno_pict_1: answer_list[0][2],
anno_pict_2: answer_list[1][2],
anno_pict_3: answer_list[2][2],
anno_pict_4: answer_list[3][2],
anno_pict_5: answer_list[4][2],
correct_ans_pict: self.correct_ans_pict,
#author: self.author,
question_pict: self.question_pict,
question: self.question,
correct_answer_position: random_insert + 1,
correct_answer_letter: correct_answer_shuffled
}

I need to target just anno_a thru anno_e