The 'downcase!' and 'downcase' are all the methods of String Class in Ruby.They have the same method name except one of them has '!' in the end and they have the same effect if the object of String class which call these methods contains upcase letter.The following are the references about these methods from ruby doc:
downcase str.downcase→ string
Returns a copy of str with all uppercase letters replaced with their lowercase counterparts.
The operation is locale insensitive—only characters A to Z are affected.Multibyte
characters are skipped.
"hEllO".downcase ! "hello"
downcase! str.downcase!→ str or nil
Replace uppercase letters in str with their lowercase counterparts, returning nil if no
changes were made.
hoho!I must have lunch,otherwirs,there are not anything to eat
downcase str.downcase→ string
Returns a copy of str with all uppercase letters replaced with their lowercase counterparts.
The operation is locale insensitive—only characters A to Z are affected.Multibyte
characters are skipped.
"hEllO".downcase ! "hello"
downcase! str.downcase!→ str or nil
Replace uppercase letters in str with their lowercase counterparts, returning nil if no
changes were made.
hoho!I must have lunch,otherwirs,there are not anything to eat