Rubyでは、あるオブジェクトのメソッドやインスタンスのインスタンス変数にアクセスする際、アクセス元(レシーバーというそうです)がnilの場合はエラーとなる。それを防ぐために返り値wをnilを変えるのが&.
演算子です(self navigation operator, ぼっち演算子というらしい)
# もし@userが未定義(nil)のとき
article = @user.article # => NoMethodError: undefined method `artcile' for nil:NilClass
article = @user&.article # => nil
これはメソッドにも演算子に対しても使えます
演算子もいくつかを除いてメソッドとして実装されているため、同じ挙動をします
nil + 10 # => NoMethodError: undefined method `+' for nil:NilClass
nil &.+ 10 #=> nil
nil << 10 # => NoMethodError: undefined method `<<' for nil:NilClass
nil &.<< 10 # => nil
# 次の2つの式が同値になる
@user.article && @user.article == Article.last
@user.article &.== Article.last