0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

三項演算子を利用せず、値がnilはnil / nil以外なら処理する方法

Last updated at Posted at 2024-01-15

モチベーション

ActiveRecordで深く潜った先の値に対して nil のときは nil 、そうでない時は値を用いて処理する場合、 if を用いると冗長になるし、三項演算子を利用するとめちゃくちゃ長くなる 😢

# userに紐づく、最後の賃貸契約の契約月数を取得(契約月数はnullable)

user = User.first

# if
if user.lease_contract.last&.period_months
 p "#{user.lease_contract.last&.period}ヶ月"
else
 nil
end

# 三項演算子
p user.lease_contract.last&.period_months ? "#{user.lease_contract.last&.period}ヶ月" : nil

何かスッキリ書く方法ないかな? 🤔

結論

then を利用するとスッキリ書けます 🖊️

# userに紐づく、最後の賃貸契約の契約月数を取得(契約月数はnullable)

user = User.first

# then
p user.lease_contract.last&.period_months&.then { |period_months| "#{period_months}ヶ月"}

point は period_month&.then の部分です。

  1. &. (ぼっち演算子)はレシーバー(period_month)が nil の場合に nil を戻す
    • period_month = nil の場合は nil が取得できる
  2. then はレシーバーをブロックとして処理し、その結果を戻す
    • period_month の値に対して { |period_months| "#{period_months}ヶ月"} を実行し、 nヶ月 という文字列を取得する
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?