Skip to content

Instantly share code, notes, and snippets.

@kadru
Created November 11, 2018 03:11
Show Gist options
  • Save kadru/30093e60a7ba7233e9e1c1754a518753 to your computer and use it in GitHub Desktop.
Save kadru/30093e60a7ba7233e9e1c1754a518753 to your computer and use it in GitHub Desktop.
safe navigation operator & and Enumerable #dig (ruby 2.3 and up)
#Safe navigation operator
if account && account.owner && account.owner.address
#your code here
end
#could be rewritten like
account&.owner&.address
#more examples
account = Account.new(owner: nil) # account without an owner
#
account.owner.address
# => NoMethodError: undefined method `address' for false:FalseClass `
account && account.owner && account.owner.address
# => false
account&.owner&.address
# => undefined method `address' for false:FalseClass`
account = Account.new(owner: false)
#
account.owner.address
# => NoMethodError: undefined method `address' for false:FalseClass `
account && account.owner && account.owner.address
# => false
account.try(:owner).try(:address)
# => nil
account&.owner&.address
# => undefined method `address' for false:FalseClass`
#Enumerable #dig
address = params[:account].try(:[], :owner).try(:[], :address)
# or
address = params[:account].fetch(:owner) .fetch(:address)
#could be rewritten like
address = params.dig(:account, :owner, :address)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment