2014-01-28 107 views
0

我有這樣的代碼有條件地顯示該項目的冠軍,如果我們是在具有@project實例變量視圖:爲什麼有條件的關心執行代碼儘管沒有返回true?

<title>My app <%= "- " + @project.title if @project.present? %></title> 

但它給我一個錯誤,出現以下消息:「不能轉換成零字符串「,即它試圖執行我的字符串連接,儘管條件語句爲假。

爲什麼它會打擾?

+0

我相信'@project.title'是'nil' ..而你不能''stritng「+ nil' ..因爲['String#+'](http://www.ruby- doc.org/core-2.1.0/String.html#method-i-2B)方法僅需要字符串參數。 –

+0

是的我知道,'@ project.title' *是*'nil'。但是爲什麼ruby會在執行代碼時關心什麼呢? – Numbers

+0

只用於調試'@project.present? == true'而不是'「 - 」+ @ project.title if @project.present?'...看看它打印了什麼。我相信'@project.present?'返回'true'。 –

回答

2

你檢查項目是否存在

@project.present? 

但如果title屬性的值設置你不檢查。當titlenil,下面的級聯,因爲你實際上試圖串連

"- " + nil 

這是兩種不同類型的

"- " + @project.title 

將失敗,can't convert nil into String錯誤。你必須明確地處理這種情況下,或通過使用插值

<%= "- #{@project.title}" if @project.present? %> 

而且使用零到字符串鑄造,謹防優先級的。如果以這種方式嵌入條件並打印,可能會導致由評估優先級引起的模糊的錯誤。

相關問題