0
我有這樣的代碼有條件地顯示該項目的冠軍,如果我們是在具有@project
實例變量視圖:爲什麼有條件的關心執行代碼儘管沒有返回true?
<title>My app <%= "- " + @project.title if @project.present? %></title>
但它給我一個錯誤,出現以下消息:「不能轉換成零字符串「,即它試圖執行我的字符串連接,儘管條件語句爲假。
爲什麼它會打擾?
我有這樣的代碼有條件地顯示該項目的冠軍,如果我們是在具有@project
實例變量視圖:爲什麼有條件的關心執行代碼儘管沒有返回true?
<title>My app <%= "- " + @project.title if @project.present? %></title>
但它給我一個錯誤,出現以下消息:「不能轉換成零字符串「,即它試圖執行我的字符串連接,儘管條件語句爲假。
爲什麼它會打擾?
你檢查項目是否存在
@project.present?
但如果title
屬性的值設置你不檢查。當title
爲nil
,下面的級聯,因爲你實際上試圖串連
"- " + nil
這是兩種不同類型的
"- " + @project.title
將失敗,can't convert nil into String
錯誤。你必須明確地處理這種情況下,或通過使用插值
<%= "- #{@project.title}" if @project.present? %>
而且使用零到字符串鑄造,謹防優先級的。如果以這種方式嵌入條件並打印,可能會導致由評估優先級引起的模糊的錯誤。
我相信'@project.title'是'nil' ..而你不能''stritng「+ nil' ..因爲['String#+'](http://www.ruby- doc.org/core-2.1.0/String.html#method-i-2B)方法僅需要字符串參數。 –
是的我知道,'@ project.title' *是*'nil'。但是爲什麼ruby會在執行代碼時關心什麼呢? – Numbers
只用於調試'@project.present? == true'而不是'「 - 」+ @ project.title if @project.present?'...看看它打印了什麼。我相信'@project.present?'返回'true'。 –