メソッドの中には、破壊的にデータを変更してしまうものがあり、慣習として名前に"!"が付けられます。
例えば、以下のコードがあったとします。
self.email = self.email.downcase
参考:Railsチュートリアル 第4版 6章より
https://railstutorial.jp/chapters/modeling_users?version=5.0#sec-minimum_password_standards
上記だと右辺で"self.email"を全て小文字にしてから自身に代入することで更新していますが、
.downcase!メソッドを用いることで、直接"self.email"の値を変更することができ、より簡潔に書けます。
self.email.downcase!
破壊的なメソッドは便利そうですが、一方で元の値を強制的に上書きするので、使いどころには注意ですね。
【追記2022/08/26】
@nodai2h_ITC 様よりご指摘を頂きました。
以前、"!"をメソッドに付けると破壊的なメソッドになると勘違いしていました。
しかし実際には、"downcase"と"downcase!"のように、非破壊のメソッドと破壊のメソッドで対になっているものがいくつかあるだけとのことです。詳しくは元のコメントをご確認ください。