質問

これは私のレポートコントローラのコードで誰が私にそれを整理する方法についていくつかの提案を与えることができます。

、それだけで、そんなに悪く見えます?

# app\controller\reports_controller.rb

 @report_lines  = []
   @sum_wp, @sum_projcted_wp, @sum_il, @sum_projcted_il, @sum_li,@sum_gross_profit ,@sum_opportunities = [0,0,0,0,0,0,0]    
 date = @start_date

 num_of_months.times do
    wp,projected_wp, invoice_line,projected_il,line_item, opp = Report.data_of_invoicing_and_delivery_report(@part_or_service,date)
    @sum_wp += wp
    @sum_projcted_wp +=projected_wp
    @sum_il=invoice_line
    @sum_projcted_il +=projected_il
    @sum_li += line_item
    gross_profit = invoice_line - line_item
    @sum_gross_profit += gross_profit
    @sum_opportunities += opp
    @report_lines << [date.strftime("%m/%Y"),wp,projected_wp ,invoice_line,projected_il,line_item,gross_profit,opp]
    date = date.next_month
 end

私は

のようないくつかの方法を使用していますよ
@sum_a,@sum_b,@sum_c += [1,2,3] 
役に立ちましたか?

解決

私のインスタント考えは次のとおりです。モデルにコードを移動

彼らは、ビジネスロジックを含むべきではありませんので、目的は、「シン・コントローラー」である必要があります。

第二に、私は私には思えるクリーナーOpenStructとしての私の見解()オブジェクトに私のレポートラインを提示したい。

だから私は、報告書上の(最も可能性が高い)クラスメソッドには、この蓄積ロジックを移動し、「レポートライン」OpenStructs、私のビューに渡す単一合計OpenStructの配列を返す検討したい。

私のコントローラのコードは次のようになります。

@report_lines, @report_totals = Report.summarised_data_of_inv_and_dlvry_rpt(@part_or_service, @start_date, num_of_months)

EDIT:(翌日)

と付け加え蓄積-に-アレイの事を見て、私はこの思い付います:

require 'test/unit'

class Array
  def add_corresponding(other)
    each_index { |i| self[i] += other[i] }
  end
end

class TestProblem < Test::Unit::TestCase
  def test_add_corresponding
    a = [1,2,3,4,5]
    assert_equal [3,5,8,11,16], a.add_corresponding([2,3,5,7,11])
    assert_equal [2,3,6,8,10], a.add_corresponding([-1,-2,-2,-3,-6])
  end
end

ルック:テスト!正常に動作するようです。二つの配列間のサイズの違いのためのチェックはありませんので、それは間違って行くことができる方法はたくさんありますが、概念は十分に健全なようです。私は、私はActiveRecordの結果セットを取ると私は私のレポートで使用する傾向があるものですOpenStruct、にそれを蓄積してみましょうするときと同じものをしようと検討している...

私たちの新しいArrayメソッドは次のようなものに、元のコードを減らすかもしれません

totals = [0,0,0,0,0,0,0]    
date = @start_date

num_of_months.times do
  wp, projected_wp, invoice_line, projected_il, line_item, opp = Report.data_of_invoicing_and_delivery_report(@part_or_service,date)
  totals.add_corresponding [wp, projected_wp, invoice_line, projected_il, line_item, opp, invoice_line - line_item]
  @report_lines << [date.strftime("%m/%Y"),wp,projected_wp ,invoice_line,projected_il,line_item,gross_profit,opp]
  date = date.next_month
end

@sum_wp, @sum_projcted_wp, @sum_il, @sum_projcted_il, @sum_li, @sum_opportunities, @sum_gross_profit = totals 

...どの場合もさらに減少するであろうgross_profitを計算することができレポート番号のdata_of_invoicing_and_delivery_reportます:

num_of_months.times do
  totals.add_corresponding(Report.data_of_invoicing_and_delivery_report(@part_or_service,date))
end

完全未試験が、それはアレイに1ライン法を付加するための還元の地獄とモデル内の単一余分減算を行ういます。

他のヒント

、それらすべてのフィールドを含む合計オブジェクトを作成します@ sum.increment_sumsに配列全体を渡す(Report.data_of ...)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top