よくある判定式

Railsで日付パラメータを受け取って判定してダメだったら今日の日付にする・・・こんな式はよく書く。

#2014-5-1
if params[:day]
  d=params[:day].split(/-/)
  if Date.valid_date?(d[0].to_i, d[1].to_i, d[2].to_i)
    chkday = Time.parse(params[:day]).to_date
  else
    chkday = Date.today
  end
else
  chkday = Date.today
end

※Asia/Tokyoのタイムゾーンでパースしたい
ボーっとしながらだといつもこんなかんじになる。おなじことを2回書いてあるところがイケてないのでちょっと修正してみる。

#2014-5-1
if params[:day]
  d=params[:day].split(/-/)
  if Date.valid_date?(d[0].to_i, d[1].to_i, d[2].to_i)
    chkday = Time.parse(params[:day]).to_date
  end
end
chkday = Date.today if ckday.nil?

もうちょっと短くできないかなー

#2014-5-1
if params[:day]
  d=params[:day].split(/-/)
  if Date.valid_date?(d[0].to_i, d[1].to_i, d[2].to_i)
    chkday = Time.parse(params[:day]).to_date
  end
end
chkday ||= Date.today

rubyの自己代入演算子"||="を使ってみた。