如何在rails中为模型定义current_model?

时间:2017-12-19 14:28:10

标签: ruby-on-rails

我认为我的问题标题有点令人困惑。但我要问的是我正在使用移动设备创建自己的身份验证系统。就像设计current_user来创建一个会话一样,我想知道如何在不同的模型上实现相同的功能。

我有一个名为 Commuter 的模型。它也有一个id。 commuter的记录看起来像这样。

Commuter.last

<Commuter id: 867, phone_number: "9483942090">

我正在尝试使用我的控制器方法验证手机号码后创建一个会话,如下所示:

def verify
    @commuter = Commuter.where(phone_number: params[:phone_number]).first
    if (@commuter && @commuter.authenticate_otp(params[:otp],drift:300))
      @commuter.auth_active = true
      if @commuter.save
        #Removed from session after verified it
        session[:phone_number] = nil
        session[:is_verified] = nil
        #signed in commuter after verified it
        sign_in(:commuter, @commuter)
        flash[:notice] = "Your mobile no is verified."
      end
    else
      flash[:alert] = "You have entered wrong otp.Please check again."
    end
    puts "#{current_commuter.phone_number}"
    redirect_to root_path
  end

我只需要puts进行调试。所以我现在得到current_commuter作为未定义的局部变量,我猜是显而易见的原因。所以我想知道如何实现这个基于当前通勤的会话?

1 个答案:

答案 0 :(得分:0)

您可以将会话中的Commuter ID保存为session[:cid] = 1,并在您的基本控制器上创建一个方法,如下所示

def current_commuter
  @commuter ||= Commuter.find session[:cid]
end


helper_method :current_commuter