现在,如果我转到我所拥有的模型的索引操作,如果数据库中没有现有记录,我不会显示rails为我生成的基本数据表。我做了类似的事情:
<% if @my_records.count > 0 %>
<table>
<tr>
<th>...</th>
<th>...</th>
<th>...</th>
<th>etc</th>
</tr>
<% @my_records.each do |my_record| %>
<tr>
<td><%=h my_record.etc %></td>
<td><%=h my_record.etc %></td>
<td><%=h my_record.etc %></td>
<td><%=h my_record.etc %></td>
</tr>
<% end %>
</table>
<% end %>
这适用于本地。但是,当我将我的应用程序推送到heroku时,这会导致500错误,并且日志显示:
ActionView::TemplateError (undefined method 'count' for []:Array) on line ...
所以我将其更改为.length
并且工作正常。谁能告诉我为什么会这样?有人告诉我,这些都是多余的,导轨摆脱.count
但我的理解是.length
是一个Array
函数,告诉你Array
中有多少项.count
是一种ActiveRecord
方法,用于确定数组中有多少项是数据库中的实际记录。
任何人都可以为我阐明这一点吗?
答案 0 :(得分:3)
这是红宝石问题,而不是铁轨。在本地你可能有1.8.7,而heroku有1.8.6。 1.8.7中引入了Enumerable#count
方法:比较http://ruby-doc.org/core-1.8.6/classes/Enumerable.html和http://ruby-doc.org/core-1.8.7/classes/Enumerable.html。