【130日目】【1日20分のRailsチュートリアル】【第10章】アカウント有効化処理のリファクタリング
今日は「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 パスワードの再設定」から。