読者です 読者をやめる 読者になる 読者になる

ぞえの技術めも

Ruby on Rails勉強中

【130日目】【1日20分のRailsチュートリアル】【第10章】アカウント有効化処理のリファクタリング

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

今日は「10.1.4 有効化のテストとリファクタリング」のリファクタリングするところから。

10.1.4 有効化のテストとリファクタリング

今日はリファクタリング

activateメソッドを作成してユーザーの有効化属性を更新し、send_activation_emailメソッドを作成して有効化メールを送信します。

activateメソッド欲しいなー、と思ってました。ソースの可読性上がるよね。

Userモデルにメソッド2つ追加して

app/models/user.rb

  # アカウントを有効にする
  def activate
    update_attribute(:activated,    true)
    update_attribute(:activated_at, Time.zone.now)
  end

  # 有効化用のメールを送信する
  def send_activation_email
    UserMailer.account_activation(self).deliver_now
  end

  private
    :

Userコントローラーのメール送信処理をsend_activation_emailメソッドに置き換えて

app/controllers/users_controller.rb

  def create
    @user = User.new(user_params)
    if @user.save
      @user.send_activation_email
      :

アカウント有効化コントローラーのアカウント有効化処理をactivateメソッドに置き換えた。

app/controllers/account_activations_controller.rb

  def edit
    user = User.find_by(email: params[:email])
    if user && !user.activated? && user.authenticated?(:activation, params[:id])
      user.activate
      :

リスト10.33ではuser.という記法を使用していないことにご注目ください。Userモデルにはそのような変数はないので、これがあるとエラーになります。

置き換え前はuser.という記法使ってたけど、Userモデルに移動させたことでuser→selfになるからいらなくなるよ、ってことか…。
処理コピペすると変更するの忘れそう。。。

リファクタリングできたのでテスト実行。問題なし。

$ bundle exec rake test
43 tests, 185 assertions, 0 failures, 0 errors, 0 skips

ついにアカウントの有効化を実装できました。きりのよい所でGitにコミットしておきましょう。

コミットしました。

$ git add -A
$ git commit -m "Add account activations"

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

次は「10.2 パスワードの再設定」から。