2016-05-23 4 views
0

Rubyでコードをリファクタリングする必要があります。 Order.rbで このコードをリファクタリングして(レール上のルビー)どのように修正するには?

私が持っている:

- price_range = [ [0,nil,"lowest"], [1,500,"lower"], [501,1000,"low"], [1001,5000,"high"], [5001,10000,"higher"], [10000,">","highest"] ] 
    - (0..5).each do |i| 
     tr 
     - if i == 0 
      th= "#{i}" 
     - else 
      th= "#{price_range[i][0]} - #{price_range[i][1]}" 
     td.text-right= Order.filter_price(price_range[i][2]).count 
      span.divider 
      = with_unit (Order.filter_price(price_range[i][2]).count.to_f/Order.count.to_f * 100.0).to_i, "%" 
     td.text-right 
      = Order.filter_price(price_range[i][2]).select{|o| o.replied?}.count 
      span.divider 
      = with_unit (Order.filter_price(price_range[i][2]).select{|o| o.replied?}.count.to_f/Order.all.select{|o| o.replied?}.count.to_f * 100.0).to_i, "%" 
      span.divider 
      = with_unit (Order.filter_price(price_range[i][2]).select{|o| o.replied?}.count.to_f/Order.filter_price(price_range[i][2]).count.to_f * 100.0).to_i, "%" 
     td.text-right 
      = Order.paid.filter_price(price_range[i][2]).count 
      span.divider 
      = with_unit (Order.paid.filter_price(price_range[i][2]).count.to_f/Order.paid.count.to_f * 100.0).to_i, "%" 
      span.margin 

私は、コードクリーナーを作るためにprice_range配列を削除し、まだ同じを取得できます:

ビューで
def self.filter_price range 
    case range.to_sym 
    when :highest 
     self.where("price > 10000") 
    when :higher 
     self.where(price: 5001..10000) 
    when :high 
     self.where(price: 1001..5000) 
    when :low 
     self.where(price: 501..1000) 
    when :lower 
     self.where(price: 1..500) 
    when :lowest 
     self.where(price: [0,nil]) 
    else 
     self 
    end 
    end 

、私はこのスリムなHTMLを持っています出力結果?

誰でもこのお手伝いをすることができます、ありがとうございます。上記

| Price | request |  reply  | Paid | 
---------------------------------------------- 
| 0 | 68 | 19/15%/27%  | 5/6% | 
--------------------------------------------- 
|1 - 500 | 19 | ....   | .... | 
---------------------------------------------- 
|.... | .... | ....   | .... | 

HTMLコードは、各行をループするためのものである:ここ

は、ビューに表示されるものです。

+0

ビューには何がレンダリングされますか? 例を挙げることはできますか? – tekina

答えて

1

あなたはハッシュとしてprice_rangeを定義することができます。 price_range = {lowest: '0', low: '1 - 500', high: '1 - 500', higher: '1 - 500', highest: '10000 >'}

あなたは、ループ内のようにOrder.filter_price(price_range.keys[0]) # lowestを呼び出すことができ

th= "#{price_range[i][0]} - #{price_range[i][1]}"

はその後

th= "#{price_range.values[i]}" # if i = 1 then price_range.values[0]: "1 - 500"

のように書くことができ

order.rbを変更して、両方とも [Order.filter_price(price_range[i][2]).count, Order.filter_price(price_range[i][2]).select{|o| o.replied?}]を返します。これにより、コードがさらにクリーンアップされます。

+0

ありがとうございます。優れた!しかし、Order.rbモデルで1つのメソッドをあまりにも多くのタスクを処理すると良いですか? –

+0

そして、どのようにして再利用のために1つの場所にすべての数字を入れることができるので、番号を変更すると、2つの場所ではなく1つの場所でしか変更できません。私が意味する数字は '['0'、 '1 - 500'、 '501 - 1000' ...]'です。 現在、数値を変更すると、Order.rbモデルの** price_range **メソッドと** filter_price **メソッドの両方を変更する必要があります。 –

関連する問題