imaz
2015/12/07 17:42:30 投稿
0

"【Refactor Me】Controllerをスッキリさせたい" をリファクタリング

Railsアプリを想定してリファクタリングしました。

ポイント

  • has_secure_password を使って認証ロジックをモデルに持たせた
  • action_args を使って(という想定で)paramsを2回書くのをやめた
  • flash を flash.now にしてリクエスト内で揮発するようにした

Before

class SessionsController < ApplicationController
  def signin
    @user = User.find_by(email: params[:email])

    if BCrypt::Password.new(@user.password_digest) == params[:password]
      self.current_user = @user
      redirect_to root_path
    else
      flash[:alert] = "Login failed."
      render :new
    end
  end
end

After

# app/controllers/sessions_controller.rb
class SessionsController < ApplicationController
  def signin(email, password)
    @user = User.find_by(email: email)

    if @user.authenticate(password)
      self.current_user = @user
      redirect_to root_path
    else
      flash.now[:alert] = "Login failed."
      render :new
    end
  end
end

# app/models/user.rb
class User < ActiveRecord::Base
  has_secure_password validations: false
end

みんなのコメント