0

このコードは機能しますが、すべての繰り返しなしでこれを行うためのよりクリーンな方法があるように感じます:

def check_out_time                                                                               
  if super                                                                                                
    super                                                                                     
  elsif try(:registration).try(:program).try(:departure_time)                                    
    registration.program.departure_time                                                          
  else                                                                                           
    Settings.default_check_out_time                                                                                           
  end
end

このモデルには という属性がcheck_out_timeあり、このコードは基本的に「チェックアウト時間が指定されていない場合は、登録のためにプログラムの出発時間を試してください。存在しない場合は、デフォルト設定を使用してください」と言っています。

これを書く良い方法はありますか?多分||演算子を使用して?

4

2 に答える 2

1

super を少なくとも 1 回、場合によっては 2 回呼び出しているようです。

if super
  super

残りは次のように単純化できます。

else
  try(:registration).try(:program).try(:departure_time) || Settings.default_check_out_time
end

私は式ごとに複数の .try のファンではありません。したがって、これを記述する別の方法は、try メソッドの連鎖を避けることです。

else
  depart_time = registration.program.departure_time rescue nil
  depart_time || Settings.default_check_out_time
end

そして、この時点で、nil を使用してその行を別のメソッド呼び出しに抽出します。

于 2013-04-29T16:35:41.563 に答える