2012-07-08 63 views
1

謝謝給大家提供給我的信息!有一些非常快速的迴應。我的解決方案是在if中使用更清晰的測試。贏得勝利的語法!if/else在erb執行代碼它不應該

「你有一個零對象時,你沒想到吧!在評估nil.name發生錯誤」

此錯誤指向以下符合「file.name」。

我得到它爲什麼評估爲nil.name和爲空(它應該是),但我不明白爲什麼代碼甚至執行。

它通過改變測試的,如果到..

if file[0] != nil 

我覺得有我的思念,所以我會很感激一些幫助理解這個重要的細節。

在我看來,我有:

<table> 
    <tr> 
    <th>File</th> 
    <th>Description</th> 
    </tr> 

    <% if [email protected]? %> 
    <% @files.each do |file| %> 
    <tr> 
     <td><%= file.name %></td> 
     <td><%= file.description %></td> 
     <td><%= link_to "Download", :controller => "files", :action => "download", :id => file.id %></td> 
     <td><%= button_to "Delete", { :controller => "files", :action => "destroy", :id => file.id }, :method => "delete" %></td> 
    </tr> 
    <% end %> 

    <% else %> 

    <tr> 
    <td><b>No files</b></td> 
    </tr> 

    <% end %> 
</table> 

在控制器我創建一個名爲@files空數組,然後推入值後在創建時。

的Ruby 1.8.7-P72 的Rails 2.2.2

+2

麻煩不在視圖中。它位於控制器中,您將向@files添加零。你能不能從控制器發佈代碼? – 2012-07-08 06:18:33

+1

也.. ..參考http://apidock.com/rails/v2.2.1/Object/present%3F ..一個替代'!@ files.empty?'將是'@ files.present?'這也檢查'@ files'爲'nil'(這只是一個更好的語法) – 2012-07-08 06:23:04

+0

簡單,'@ files'包含一個或多個'nil's。請注意,'![nil] .empty?'返回'true'(而不是'false') - 會更清晰,'[nil] .present?'將返回'true'。你可以使用'@ files.compact.each'。或者更好的是,確保'@ files'首先不包含'nil'。 – Zabba 2012-07-08 08:53:29

回答

0

你想在你@files比如VAR什麼是一個空數組

@files = [] 

或實際File對象

@files = File.all 

但你似乎以某種方式產生一個包含nil元素的數組,例如

@files = [nil, <#File>, <#File>] 

所以@files本身不是零,而它的第一個元素是。因此,下面的代碼返回true

@files.any? 

這相當於

[email protected]? 

因爲@files.is_a? Arraynot @files.nil?。您的問題必須位於相應的控制器中,您似乎在@files中添加了nil元素。

+0

謝謝你帶來的任何?方法。這對我來說是另一個新的。使用[email protected]?使邏輯太混亂。我現在意識到它正在執行,當我認爲它不應該是因爲數組是空的,我把!在那裏讓它成真。如果我打算使用這種邏輯,我應該有...... @ files.empty? ==假 – johnny2k 2012-07-08 20:45:57

+0

@ johnny2k不客氣。如果這解決了你的問題,請不要將問題標題改爲'[求解]',但通過檢查左邊的小勾號接受答案。如果你喜歡答案,你也可以考慮積極投票。這向其他人顯示答案實際上是正確的。此外,答案的海報可以通過這種方式獲得聲譽。 – 2012-07-09 08:24:05

+0

我很想爲所有這些答案投票,但我還沒有聲望水平。 – johnny2k 2012-07-09 21:44:02