2015-05-22 42 views
0

我在這裏有一行代碼檢查列是否存在於user.identity對象中。它不會失敗,如果user對象有identity。但當user對象沒有identity值時它失敗。檢查嵌套關聯是否有對象

text += "Print me: \n" if @user.identity.name.present? && [email protected]? 

我想先檢查是否存在identity。我怎樣才能做到這一點?有沒有任何方法來檢查嵌套對象的鏈?

我試圖儘可能避免ifs的長條件。

回答

1

是的,你可以使用try(如果你使用它一次,你必須使用它之後,所有的方式)

if @user.try(:identity).try(:name).present? 
0

您可以使用try同時呼籲name這樣的:

text += "Print me: \n" if @user.identity.try(:name).present? && [email protected](:phone).active? 

注意:由於try檢查很多其他事情,try是不優選的性能方面,只是爲了避免檢查是否最後的方法可以調用下一個或不。你可能想試試這個(更易讀&首選):

id = @user.identity 
text += "Print me: \n" if id && id.name.present? && !id.phone.active? 
+0

感謝。已經得到它。 :) –

0

您可以在下面的方式來使用它:

text += "Print me: \n" if @user.try(:identity).try(:name) && [email protected](:identity).try(:phone).try(:active?)