感谢大家为我提供信息!有一些非常迅速的反应。我的解决方案是在if中使用更清晰的测试。语法获胜!
"你有一个nil对象,但你没想到!在评估nil时出错。name"
此错误指向下面带有"file.name"的行。
我明白为什么它的计算结果是nil.name并且是空的(应该是空的),但我不明白为什么代码会被执行。
它通过将if的测试更改为..来工作
if file[0] != nil
我觉得我遗漏了一个重要的细节,所以我很感激你能帮助我理解这一点。
在我看来,我有:
<table>
<tr>
<th>File</th>
<th>Description</th>
</tr>
<% if !@files.empty? %>
<% @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轨道2.2.2
您想要的@files
实例var要么是空数组
@files = []
或实际CCD_ 2对象
@files = File.all
但是您似乎以某种方式生成了一个包含nil
元素的数组,例如
@files = [nil, <#File>, <#File>]
所以@files本身不是nil,而它的第一个元素是。因此,下面的代码返回true
@files.any?
相当于
!@files.empty?
因为CCD_ 5和CCD_。您的问题一定在相应的控制器中,您似乎在其中向@files
添加了nil
元素。