레일즈 애플리케이션에서 odf-report gem을 사용하여 리포트를 생성합니다. 그러나 나는 if condition
내 끝 부분에 하나 또는 두 개의 변경 사항과 각 절에서 동일한 110 줄의 코드를 사용합니다. 코드 블록에서 반복되는 110 개의 라인을 정의하고 내 메인 메소드에서 해당 코드 블록을 호출하는 방법이 있는지 궁금합니다. 아래 방법의 예입니다반복 코드 용 컨트롤러에서 코드 블록을 레일링하십시오.
def print_enrolment_form_completed
kid = Kid.find(params[:id])
if kid.not_anaphylactic?
report = ODFReport::Report.new("#{Rails.root}/app/reports/Student_Enrolment_Completed.odt") do |r|
#same 110 lines of code
end
else
report = ODFReport::Report.new("#{Rails.root}/app/reports/Student_Enrolment_Completed_Allergy.odt") do |r|
#same 110 lines of code
r.add_field(:a2, kid.fish ? "Yes" : "No")
r.add_field(:a3, kid.eggs ? "Yes" : "No")
r.add_field(:a4, kid.milk ? "Yes" : "No")
end
end
end
내 목표는 단지 컨트롤러의 다른 곳에서 정의 된 110 줄을 주석 위에 나열된 코드 블록을 산출 할 것입니다. 모든 아이디어를 높이 평가합니다!
if와 함께 사용중인 보고서를 설정할 수 없습니까? 그리고 나서 110 선을 if의 바깥으로 옮깁니 까? if의 외부에 report = nil을 수행하여 보고서가 범위 내에 있는지 확인하십시오. – Doon
if 문은 이해하지 못함 - 두 가지 분기에서 동일한 보고서를 만들 수 있음 –
Proc에 코드를 추출하고 'instance_eval' 메서드를 사용하여 두 개의 별도 컨텍스트에서 코드를 실행할 수 있습니다. – illusionist