让我们把它分解:
@_current_user ||= {SOMETHING}
这是说,设置@_current_user
到{SOMETHING}
如果它是nil
,false
或未定义。否则将其设置为@_current_user
,换句话说,什么都不做。一个扩展的形式:
@_current_user || @_current_user = {SOMETHING}
好的,现在到右侧。
session[:current_user_id] &&
User.find(session[:current_user_id])
大家平时看到的&&
布尔值只,但是在Ruby中你没有这样做。这里的技巧是,如果session[:current_user_id]
不是零,并且User.find(session[:current_user_id])
不是零,则表达式将评估为User.find(session[:current_user_id])
否则为零。
所以把他们放在一起在伪代码:
if defined? @_current_user && @_current_user
@_current_user = @_current_user
else
if session[:current_user_id] && User.find(session[:current_user_id])
@_current_user = User.find(session[:current_user_id])
else
@_current_user = nil
end
end
这是不是一个 “导轨” 的东西,它是一个标准的Ruby操作。 – 2011-04-17 04:47:00
@锡匠 - 我同意。谢谢 。 – 2011-04-17 04:52:15