Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
117
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

Railsで感嘆符!を理解しよう(save, save!)

はじめに

Railsの勉強をしている際、「メソッドの最後に!がついているけど何だこれは???」と思ったことがありました。Rubyの場合は!で否定演算子や!!でメソッドの返り値をtrue/falseにするなどがありますが、今回はRailsメソッドの感嘆符!について説明していこうと思います。

感嘆符!とは

感嘆符とはエクスクラメーションマークのことです。以下Wikipediaより

(かんたんふ)とは、約物のひとつで、「!」 と書き表される。 雨垂れ、または俗にビックリマークとも呼ばれる。 また英語表記に由来した呼称「エクスクラメーション・マーク (exclamation mark)」と呼ばれることもある。

!をつけるとつけないとでは何が違うのか?

よく使われるメソッドでcreatesaveなどがあります。これらの処理を実行しレコードの作成、保存に失敗した際、通常の場合はnilを返します。しかし、create!save!のようにをつけることによりActiveRecord::RecordNotFoundエラーを発生させることができます。
つまりをつけることにより、例外を発生させるか発生させないかの違いです。


create!save! → レコードの作成・保存に失敗 → 例外を発生させる 
createsave → レコードの作成・保存に失敗 → nilを返す


saveメソッドの場合は保存の成功と失敗を true/false で返すのに対して、save!メソッドは保存を失敗した場合に例外を返します。つまり、save!を使えば例外をトリガーにしてロールバックなどの処理を行うことができるため、比較的使用頻度が高いかと思います。

補足:そもそも例外処理とは?

プログラムがある処理を実行している途中で、なんらかの異常が発生した場合に、現在の処理を中断(中止)して、別の処理を行うこと。その際に発生した異常のことを例外と呼ぶ

つまり、プログラムがすんなり通らなかったときに行う処理のことを指します。理想とは違う処理が例外という解釈でもいいと思います。

まとめ

  • メソッドの最後にをつけることにより、レコードの作成などに失敗した際の挙動をかえることができる。 → 例外処理を書く際に利用できる。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
117
Help us understand the problem. What are the problem?