这里@_current_user的价值是多少?

时间:2013-03-31 00:27:27

标签: ruby-on-rails

  def current_user
    @_current_user ||= session[:current_user_id] &&
      User.find_by_id(session[:current_user_id])
  end

@_current_user只是一个id或由其id找到的用户对象吗?

2 个答案:

答案 0 :(得分:1)

直接回答您的问题:如果会话中没有nil值,或者如果该ID没有用户对象,则由其ID或:current_user_id找到的用户对象。

基本上,如果已设置@_current_user,则不会更改它。否则,它会检查session[:current_user_id]是否存在/是否已设置,如果是&&运算符,则返回右侧作为表达式的值。右侧基本上用current_user_id查找用户。

更简单:如果尚未设置@_current_user,那么如果会话具有current_user_id值,则会将@_current_user设置为与该用户ID匹配的User对象

答案 1 :(得分:0)

如果我们假设session[:current_user_id]5,那么具有User模型的&&运算符将返回User实例:

> 5 && User.new(:name => 'Foo')
=> #<User name="Foo"> 

如果&&运算符的两边都是“truthy”(意思是未定义或false),则&&运算符会返回右侧值。因此@_current_user将是用户实例。