感谢向所有人提供信息!有一些非常快速的回应。我的解决方案是在if中使用更清晰的测试。胜利的语法!
“当你没想到它时,你有一个零对象!评估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 Rails 2.2.2
答案 0 :(得分:0)
您在@files
实例var中想要的是一个空数组
@files = []
或实际File
个对象
@files = File.all
但你似乎以某种方式生成一个包含nil
元素的数组,例如
@files = [nil, <#File>, <#File>]
所以@files本身不是nil,而它的第一个元素是。因此,以下代码返回true
@files.any?
相当于
!@files.empty?
因为@files.is_a? Array
和not @files.nil?
。您的问题必须在相应的控制器中,您似乎在nil
添加@files
元素。