我试图理解以下方法究竟是如何工作的以及它说的是什么,我知道它的作用,但我想要掌握它的确切运作方式。我想我理解= ||运营商,但我并不是100%明确'如何'在等式的后半部分工作:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
该方法检查当前用户是否已登录。
根据我的理解,它评估为真或假,但我不确定如何!
答案 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
此表达式导致
session[:user_id]
session[:user_id]
session[:user_id]
时,但它与数据库中的任何现有用户都不对应。答案 1 :(得分:1)
它基本上是设置@current_user,但如果它不存在,则执行以下操作以设置当前用户(||=
部分)。下一部分是说如果当前会话附加了user_id,即if session[:user_id]
,则根据该user_id找到该会话的用户,并将它们存储在@current_user实例变量中。
希望有所帮助
贾斯汀