0

私はRubyが初めてです。私は Michael Hartl のRuby on Rails Tutorialを行っており、ユーザーのモデルでは次のコードが使用されています。

before_save { self.email = email.downcase }

このコンテキストでは、代わりに次のように記述しても問題ありません。

before_save { self.email.downcase! }

または、これに何らかの理由で欠陥がありますか? もしそうなら、その理由を簡単に説明していただけますか?

4

3 に答える 3

0

元のメソッドは属性 setter メソッドemail=を呼び出すため、次の方法を使用します。

self.email= email.downcase

その後、ActiveRecord は追加の処理を実行できます。たとえば、変更された属性を追跡して、データベースの更新を最適化する場合があります。

で変更するとdowncase!、最初に getter が呼び出され、ActiveRecord が文字列を返し、次に文字列をその場で変更しますが、ActiveRecord はこれを直接認識しません。この例ではうまくいくかもしれませんが、この習慣に陥らない方が安全です。

于 2015-10-10T23:38:59.497 に答える