Ruby Rails方法评估查询

时间:2016-01-20 12:01:10

标签: ruby-on-rails ruby

我试图理解以下方法究竟是如何工作的以及它说的是什么,我知道它的作用,但我想要掌握它的确切运作方式。我想我理解= ||运营商,但我并不是100%明确'如何'在等式的后半部分工作:

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

该方法检查当前用户是否已登录。

根据我的理解,它评估为真或假,但我不确定如何!

2 个答案:

答案 0 :(得分:3)

@current_user ||= User.find(session[:user_id]) if session[:user_id] 

相当于

if session[:user_id]
  if !@current_user
    @current_user = User.find(session[:user_id])
  end
  @current_user
end

此表达式导致

  1. 用户对象 - 当有session[:user_id]
  2. nil - 当没有session[:user_id]
  3. 例外 - 当有session[:user_id]时,但它与数据库中的任何现有用户都不对应。

答案 1 :(得分:1)

它基本上是设置@current_user,但如果它不存在,则执行以下操作以设置当前用户(||=部分)。下一部分是说如果当前会话附加了user_id,即if session[:user_id],则根据该user_id找到该会话的用户,并将它们存储在@current_user实例变量中。

希望有所帮助

贾斯汀