2011-10-28 42 views
1

在下面的視圖代碼示例中,我可以避免兩次使用@thing嗎?我需要檢查nil,但視圖變得非常混亂。消除視圖中的重複

if @thing 
    @thing 
end 

@thing unless @thing.nil? 
+1

'@thing if @ thing'可能是我知道的最短的。 –

+0

Ta,Jakub。很高興知道我不會錯過任何明顯的事情。 – snowangel

回答

0

您可以嘗試使用像[andand] [1。

看着亞歷克斯的答覆意見,你可能最終的東西,如:

isbn.pubdate.andand.strftime("%d %B '%y") 

這將返回nil或正確格式化字符串靠的是什麼pubdate的。

1

如果你只是想輸出@thing或什麼,如果事情是nil,你應該能夠只是做:

<%= @thing %> 

如果@thing是nil Ruby將會調用Nil.to_s,它返回""(即沒有任何輸出)。否則,它會調用@thing.to_s

+0

我會將其標記爲正確的,因爲它回答了我的問題。然而 - 我真實的例子是:'isbn.pubdate.strftime(「%d%B'%y」)''。如果pubdate爲零,則會出現錯誤,因爲您無法在nil上調用strftime。你知道有什麼方法可以避免檢查零時有另一種方法被稱爲? 我現在把醜陋的一面變成了幫手,但我不希望幫手也變醜! – snowangel

+1

@snowangel <%= isbn.pubdate.try(:strftime,「%d%B」%y「)%>。嘗試是send()的別名,所以如果你在nil上調用try ,你只能得到零,所以你可以鏈接它們。 Foo.bar.try(:baz).try(:to_s)#=>無 – Unixmonkey

+0

哦,光榮的。雖然我沒有讀過發送/嘗試的地方是壞的? – snowangel