我有一個一對多的用戶組合< -Posts。簡單的導軌問題
某些職位已關聯,其他職位的用戶ID爲nil
。
如果在ERB,我做的:
post.user_id? post.user.email
我得到了一個職位進行遍歷時,
undefined method `email' for nil:NilClass
。爲什麼我的初始條件不能防止這種情況發生?
我有一個一對多的用戶組合< -Posts。簡單的導軌問題
某些職位已關聯,其他職位的用戶ID爲nil
。
如果在ERB,我做的:
post.user_id? post.user.email
我得到了一個職位進行遍歷時,
undefined method `email' for nil:NilClass
。爲什麼我的初始條件不能防止這種情況發生?
我不認爲你的語法有道理。嘗試:
post.user.email if post.user_id?
或
post.user_id? ? post.user.email : nil
或
if post.user_id?
post.user.email
end
或
post.user.try(:email)
所有這些都應該工作。注意:您應該也可以使用post.user.present?
或!post.user.nil?
,這兩個都比檢查ID更清潔。
你應該能夠改寫稍微使之更有意義:
<%= post.user.email if post.user %>
我不太理解你的代碼,因爲它看起來並不像你貼什麼條件,但上述ERB聲明應該做到這一點。
編輯:我應該補充說,Ruby在條件語句中將nil對象評估爲false,因此不需要檢查user.nil?
,儘管這仍然是完全有效的。這使您可以製作簡短的條件語句,如上所述。