Rails:臭名昭着的“current_user”来自哪里?

时间:2012-10-04 03:41:13

标签: ruby-on-rails

我最近一直在环顾Rails并注意到current_user有很多引用。这只来自Devise吗?即使我使用Devise,我是否必须自己手动定义?是否有使用current_user的先决条件(如会话,用户等的存在)?

2 个答案:

答案 0 :(得分:72)

它由几个宝石定义,例如:设计

您需要将user_id存储在某处,通常是在登录后的会话中。它还假设您的应用程序具有并且需要用户,身份验证等。

通常,它类似于:

class ApplicationController < ActionController::Base
  def current_user
    return unless session[:user_id]
    @current_user ||= User.find(session[:user_id])
  end
end

这假设User类存在,例如#{Rails.root}/app/models/user.rb

更新:当没有当前用户时,请避免其他数据库查询。

答案 1 :(得分:8)

是的,current_user使用session。如果要进行自己的身份验证,可以在应用程序控制器中执行类似的操作:

def current_user
  return unless session[:user_id]
  @current_user ||= User.find(session[:user_id])
end