safe navigationについて
safe navigationについて
Rubocopに怒られたので、まとめてみます。
Safe navigationとは
safe navigation operatorは「ぼっち演算子」とも呼ばれるようです。
obeject&.bazと記載すると、objectがnilでない時に、bazメソッドを実行してくれます。
objectがnilの場合は、no method errorではなく、nilを返してくれます。
実際にやってみましょう。今回の環境は、sorceryのreset_passwordを使用したパスワードリセット機能を構築したので、そちらを使ってみます。
Safe navigation operatorを使わない場合
def create @user = User.find_by(email: params[:email]) @user.deliver_reset_password_instructions! if @user redirect_to root_path, success: t('.success') end
後置ifを使った書き方です。@userがnilでない(objectが存在するならば)なら、@user.deliver_reset_password_instructions!を実行するという意味です。
(deliver_reset_password_instructions!はsorceryの機能で、resetパスワードトークン発行、メーラーからメール送信を行ってくれます。)
理解しやすい書き方だと思います。
Safe navigation operatorを使う場合
def create @user = User.find_by(email: params[:email]) @user&.deliver_reset_password_instructions! redirect_to root_path, success: t('.success') end
先ほどの書き方よりも、省略されました。
こちらも先ほどと同じ意味で、@userが存在するならば、@user.deliver_reset_password_instructions!を実行します。こちらの方がシンプルで、文の前半から意味を理解できるので、チーム開発はこちらの方が良いかもしれませんね。