我正在关注迈克尔·哈特尔的ruby on rails教程,如果不满意的话我也不知道如何在里面使用赋值算子:
if (user_id = session[:user_id])
@current_user ||= User.find_by(id: user_id)
end
有人可以解释背后的逻辑吗?
答案 0 :(得分:5)
这是Ruby中的一种语法糖。
Ruby允许您在条件中分配变量并返回值
x = true #=> returns true
if (user_id = session[:user_id])
@current_user ||= User.find_by(id: user_id)
end
相当于
user_id = session[:user_id]
if user_id
@current_user ||= User.find_by(id: user_id)
end
为您节省一条线。
如果session[:user_id]
是假的,它会将假值分配给user_id
并且不会执行该块。
答案 1 :(得分:4)
您可以在if
语句中使用赋值运算符,因为赋值是一个表达式。赋值表达式的结果是您要分配的值。
在这种情况下,如果session[:user_id]
不是nil
或false
,则会调用if
分支的结果,user_id
将设置为session[:user_id]
的结果。如果session[:user_id]
为nil
或false
,则仍会将其分配给user_id
,但if
内的逻辑将无法评估。
答案 2 :(得分:1)
这相当于这样做:
user_id = session[:user_id]
if user_id
@current_user ||= User.find_by(id: user_id)
end
答案 3 :(得分:0)
我相信这就是赋值运算符试图说的......这就是说如果@current_user值为null,则将其设置为等于user_id。否则,请保留@current_user值。您可以将其读作@current_user = @current_user || User.find_by(id: user_id)