Rubyの"!"は破壊的以外の意味も持つ

破壊的メソッドにつけられる"!"は、例外を発生させるメソッドにもよく利用されるそうです。破壊的メソッドの例は String#chop、例外を発生させるメソッドの例は RailsActiveRecord::Base#save! などです。.o0(今、Rails本を読んでます)

破壊的メソッド

ある文字列の末尾から改行文字を取り除きたいとき、Rubyでは String#chop や String#chomp というメソッドを使います。chop は単純に文字列の最後の文字を取り除くので、改行文字以外の文字を取ってきてしまうこともありますが、chomp は最後が改行文字の場合にだけ作用します。
chop も chomp も String のメソッドですが、どちらのメソッドを使っても String 自体には影響はありません。String 自体に変更を加えたい場合は破壊的メソッドを使います。

s = "hoge\n"

s.chop  # => "hoge" 末尾の改行を取り除く
s       # => "hoge\n" でも s 自体に変化はない
s.chop! # => "hoge" 破壊的メソッドを使うと 
s       # => "hoge" s 自体も変化する(破壊される)
s.chop  # => "hog" chop は改行以外でも取り除く
s.chomp # => "hoge" chomp は改行以外は取り除かない