2013-01-23 52 views
0

我是否總是需要在此添加if @user我是否總是需要添加'如果有東西'以避免'無'錯誤?

在模式1中,它沒有if @user,所以當用戶被刪除時它返回'nil'錯誤。

在模式2,它不會返回「零」的錯誤,但它太是煩人添加此的這些事情每一個線:(

是不是有解決這種「無任何聰明的辦法「錯誤? 和我只想顯示 」[未找到用戶]「,當用戶已刪除。

視圖/帖/ show.html.erb

#Pattern 1 
<%= display_nickname(@user.nickname) %> 

#Pattern 2 
<%= display_nickname(@user.nickname) if @user %> 

application_helper.rb

def display_nickname(nickname) 
    if !nickname.nil? 
     return nickname 
    end 
    "[Not Found User]" 
end 

回答

1

你可以寫你的助手這樣的:

def display_nickname(user) 
    user.try(:nickname) || "[Not Found User]" 
end 
+0

視圖怎麼樣?在我的情況下,只要它在視圖部分爲零( – MKK

+0

)時它看起來完全返回錯誤,然後錯誤來自其他地方。如果'user'爲'nil','try'不會引發異常。 – Robin

+0

然後檢查錯誤來自何處 – Robin

2

很多,但不是所有情況下,你可以使用的ActiveSupport的「嘗試」的方法。

foo = Foo.find(1) 
foo.bar.try(:some_method) 

在示例中,如果bar爲零,則some_method也會返回nil。

所以,你可以這樣做:

@user.try(:nickname) 
+0

然後當它爲零時它會返回什麼?只是空白????? – MKK

+0

它將返回'nil'。 – Robin

+0

如何獲取空白以便在表格中不顯示任何內容cell?nil is killing me :( – MKK

1

怎麼樣

def display_nickname(user) 
    "#{user.try(:nickname)}" 
end 

def display_nickname(user) 
    user ? user.nickname : '' 
end 

都將打印'如果用戶是零,我選擇了第二種

+0

第一個看起來超級智能複雜,謝謝! – MKK

相關問題