Bad:
ids = ['pig', '', 'sheep'] animals = ids.map {|id| Animal.find(id)} animals.each do |animal| puts animal.nil? ? 'no animal' : animal.name end
Good:
animals = ids.map{ |id| GuaranteedAnimal.find(id) } animals.each{ |animal| puts animal.name } class GuaranteedAnimal def self.find(id) Animal.find(id) || MissingAnimal.new end end class MissingAnimal def name 'no animal' end end
Seen in the video of Sandi Metz in RailsConf 2015:
‹ Wikidata
Categories: Ruby on Rails & other tech