私のレールアプリケーションでは、odf-report gemを使ってレポートを生成しています。しかし私はif condition
私の方法では、最後に1つまたは2つの変更を各句で同じ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'メソッドを使用して2つの別々のコンテキストでコードを実行することができます – illusionist