ぞえの技術めも

Ruby on Rails勉強中

【122日目】【1日20分のRailsチュートリアル】【第10章】アカウントの有効化トークンやダイジェストを作成する処理を追加する

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

今日は「10.1.1 AccountActivationsリソース」のアカウントの有効化について考えるところから。

10.1.1 AccountActivationsリソース

ユーザーが新しい登録を完了するためには必ずアカウントの有効化が必要になるのですから、有効化トークンや有効化ダイジェストはユーザーオブジェクトが作成される前に作成しておく必要があります。

before_createコールバックを使うとユーザーオブジェクト作成前に有効化トークンや有効化ダイジェストを作成できるそう。

Userモデルに有効化トークンとダイジェストを作成する処理を追加する。
ついでにメールアドレスを小文字に変換する処理もちょっと書き換える。

app/models/user.rb

class User < ActiveRecord::Base
  attr_accessor :remember_token, :activation_token
  before_save   :downcase_email
  before_create :create_activation_digest
  :
  private

    # メールアドレスをすべて小文字にする
    def downcase_email
      self.email = email.downcase
    end

    # 有効化トークンとダイジェストを作成および代入する
    def create_activation_digest
      self.activation_token  = User.new_token
      self.activation_digest = User.digest(activation_token)
    end
end

先に進む前に、サンプルデータとフィクスチャも更新し、テスト時のサンプルとユーザーを事前に有効化しておきましょう (リスト10.4リスト10.5)。

サンプルデータ更新。

db/seeds.rb

User.create!(name:  "Example User",
              :
             activated: true,
             activated_at: Time.zone.now)

99.times do |n|
              :
              activated: true,
              activated_at: Time.zone.now)
end

フィクスチャの各ユーザーに下記コードを追加。

test/fixtures/users.yml

  :
  activated: true
  activated_at: <%= Time.zone.now %>
  :

いつものようにデータベースを初期化して、サンプルデータを再度生成し直し、リスト10.4の変更を反映します。

下記を実行してサンプルデータを再度生成し直しました。

$ bundle exec rake db:migrate:reset
$ bundle exec rake db:seed

これでようやく準備的なものは終わりなのかな…??

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

次は「10.1.2 AccountActivationsメイラーメソッド」から。