Ruby on Rails教程if(user_id = session [:user_id])

Sim*_*nas 1 ruby ruby-on-rails

我正在关注迈克尔·哈特尔的ruby on rails教程,我不知道他如何使用赋值运算符如果condintion:

if (user_id = session[:user_id])
      @current_user ||= User.find_by(id: user_id)
end
Run Code Online (Sandbox Code Playgroud)

有人可以解释它背后的逻辑吗?

kid*_*ils 6

这是Ruby中的一种语法糖.

Ruby允许您在条件中分配变量并返回值

x = true #=> returns true

if (user_id = session[:user_id])
  @current_user ||= User.find_by(id: user_id)
end
Run Code Online (Sandbox Code Playgroud)

相当于

user_id = session[:user_id]
if user_id
  @current_user ||= User.find_by(id: user_id)
end
Run Code Online (Sandbox Code Playgroud)

为您节省一条线.如果session[:user_id]是假的,它会将false值赋给user_id并且不执行该块.