簡體   English   中英

在Ruby On Rails中重構session_controller

[英]Refactoring sessions_controller in Ruby On Rails

我正在學習重構代碼,但在重構應用程序中的session_controller時遇到了麻煩。它違反了“告訴不要問”的原則。我正在考慮為自己的類提取一些邏輯,但不確定如何會起作用。這是控制器的代碼。

class SessionsController < ApplicationController
  def create
    admin = Admin.find_by(email: params[:sessions][:email]) 
    if admin && admin.authenticate(params[:sessions][:password])
      sign_in admin
      redirect_to anasayfa_path
      flash[:success] = 'Başarılı şekilde giriş yapıldı'
    else
      redirect_to root_path
      flash[:error] = 'Giriş bilgilerinde bir hata var'
    end
  end
end

我該如何重構呢?

admin && admin.authenticate(params[:sessions][:password])

從這種方法,但這將是最好的方法嗎?如果我提取了這個,我將放在哪里?

首先,您可以提取管理員查詢,因為它可以在其他操作中重復使用。

另外,您可以標准化閃存鍵: noticealert#redirect_to理解的兩個標准鍵。

class SessionsController < ApplicationController
  before_filter :find_admin

  def create
    if @admin.authenticate(params[:sessions][:password])
      sign_in @admin
      redirect_to anasayfa_path, notice: 'Başarılı şekilde giriş yapıldı'
    else
      redirect_to root_path, alert: 'Giriş bilgilerinde bir hata var'
    end
  end

  private

  def find_admin
    @admin = Admin.where(email: params[:sessions][:email]).first or redirect_to( root_path, alert: 'not logged in' )
  end
end

如果未找到admin,則必須使用#where而不是#find_by以避免異常。

如果要保留當前的閃存鍵,可以添加一個初始化器:

ActionController::Flash.add_flash_types( :success, :error )

在路徑#redirect_to#find_admin當認證失敗或許應該指出登錄網址。

嘗試這個

class SessionsController < ApplicationController
  def create
    admin = Admin.find_by(email: params[:sessions][:email])
    login_status = false 
    if admin && admin.authenticate(params[:sessions][:password])
      sign_in admin
      login_status = true
    end
    login_status ? redirect_to(anasayfa_path, :flash => {:success => 'Başarılı şekilde giriş yapıldı'}) : redirect_to(root_path, :flash => {:error => 'Giriş bilgilerinde bir hata var'})  
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM