def current_user
@_current_user ||= session[:current_user_id] &&
User.find_by_id(session[:current_user_id])
end
@_current_user只是一个id或由其id找到的用户对象吗?
答案 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
将是用户实例。