讓我們把它分解:
@_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