Forum: Ruby on Rails Help refactoring

Be2b7277cff8516117cbd7a33df7b03a?d=identicon&s=25 Dave Castellano (dcastellano1)
on 2013-07-03 04:49
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
Ce5e201eca55d4f79d0ead9acc91d544?d=identicon&s=25 Dheeraj Kumar (Guest)
on 2013-07-03 05:01
(Received via mailing list)
@formatted_question.each_pair do |key, value|
   @formatted_question[key] = @question[:correct_anno] if value.length <
2
end

--
Dheeraj Kumar
Be2b7277cff8516117cbd7a33df7b03a?d=identicon&s=25 Dave Castellano (dcastellano1)
on 2013-07-03 05:15
Dheeraj Kumar wrote in post #1114259:
> @formatted_question.each_pair do |key, value|
>    @formatted_question[key] = @question[:correct_anno] if value.length <
> 2
> end
>
> --
> Dheeraj Kumar

Thanks!!
Be2b7277cff8516117cbd7a33df7b03a?d=identicon&s=25 Dave Castellano (dcastellano1)
on 2013-07-03 05:38
Dave Castellano wrote in post #1114260:
> Dheeraj Kumar wrote in post #1114259:
>> @formatted_question.each_pair do |key, value|
>>    @formatted_question[key] = @question[:correct_anno] if value.length <
>> 2
>> end
>>
>> --
>> Dheeraj Kumar
>
> 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
Ce5e201eca55d4f79d0ead9acc91d544?d=identicon&s=25 Dheeraj Kumar (Guest)
on 2013-07-03 06:00
(Received via mailing list)
[: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 Kumar
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.