##try
定義してないメソッドに対してnilを返す
User.first.try(:email)
# => "abc@gmail.com"
User.first.try(:aaa)
# => nil
nil.try(:email)
# => nil
##try!
定義してないメソッドに対してNoMethodErrorを返す
User.first.try!(:email)
# => "abc@gmail.com"
User.first.try!(:aaa)
# NoMethodError: undefined method `aaa' for #<User:0x000055eafbb7a4d0>
nil.try!(:email)
# => nil
##&.
基本的にtry!と同じ挙動
Employee.find_by(firstname: 'コナン')&.email || 'コナンというユーザーは存在しません'
# => "conan@gmail.com"
Employee.find_by(firstname: 'コナン')&.email || 'コナンというユーザーは存在しません'
# => "コナンというユーザーは存在しません"
Employee.find_by(firstname: 'コナン')&.aaa
# NoMethodError: undefined method `aaa' for #<User:0x000055eafb23fc30>
##参考