2011-07-13 107 views
1

我有一個一對多的用戶組合< -Posts。簡單的導軌問題

某些職位已關聯,其他職位的用戶ID爲nil

如果在ERB,我做的:

post.user_id? post.user.email 

我得到了一個職位進行遍歷時,

undefined method `email' for nil:NilClass 

。爲什麼我的初始條件不能防止這種情況發生?

回答

3

我不認爲你的語法有道理。嘗試:

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更清潔。

0

你應該能夠改寫稍微使之更有意義:

<%= post.user.email if post.user %> 

我不太理解你的代碼,因爲它看起來並不像你貼什麼條件,但上述ERB聲明應該做到這一點。

編輯:我應該補充說,Ruby在條件語句中將nil對象評估爲false,因此不需要檢查user.nil?,儘管這仍然是完全有效的。這使您可以製作簡短的條件語句,如上所述。