ぞえの技術めも

Ruby on Rails勉強中

【143日目】【1日20分のRailsチュートリアル】【第10章】演習の3.と期限切れの比較の証明

Ruby on Railsチュートリアル(第3版)

今日は「10.5 演習」の3.から。

10.5 演習

3.リスト10.42では、activateメソッドとcreate_reset_digestメソッドの両方でupdate_attributeを呼び出しており、それぞれのアクセスによってデータベーストランザクションが個別に発生してしまう点が残念です。
リスト10.59のテンプレートに記入することで、個別のupdate_attribute呼び出しを単一のupdate_columns呼び出しに統合し、データベースアクセスが1回で済むようにしてください。
変更後にテストを実行し、GREENになることを確認してください。

2行で書いてるupdate_attribute(=2回データベースアクセスが発生する)をupdate_columnsで1回のデータベースアクセスにしよう、ってことか。
まとめるだけだから引数は変えなくて問題ないかな。

app/models/user.rb

class User < ActiveRecord::Base
  :
  # アカウントを有効にする
  def activate
    update_columns(activated: true, activated_at: Time.zone.now)
  end
  :
  # パスワード再設定の属性を設定する
  def create_reset_digest
    self.reset_token = User.new_token
    update_columns(reset_digest:  User.digest(reset_token),
                   reset_sent_at: Time.zone.now)
  end

テスト実行して問題ないことを確認。

$ bundle exec rake test
48 tests, 217 assertions, 0 failures, 0 errors, 0 skips

演習終わり!

10.6 証明: 期限切れの比較

この説では、10.2.4で用いたパスワード期限切れの期間の比較が正しいことを証明します。

私の中では納得できている話なのでさらっと読むだけ。

数式で書くと順を追って理解できるから分かりやすいね。

今日の学習時間は【14分】

これにて第10章終わり!

次は「第11章 ユーザーのマイクロポスト」から。