2010-08-27 7 views
3

En ce moment, si je vais à l'action d'index d'un modèle que j'ai, je ne montre pas le tableau de données de base que les rails génère pour moi s'il n'y a pas enregistrements dans la base de données. Je fais quelque chose comme:Array.count fonctionne très bien localement mais casse sur heroku

<% 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 %> 

Ceci fonctionne localement. Cependant, quand je pousse mon application à Heroku, cela provoque une erreur 500 et le journal dit: ActionView::TemplateError (undefined method 'count' for []:Array) on line ...

Je changer à .length et il fonctionne très bien. Quelqu'un peut-il me dire pourquoi? Quelqu'un m'a dit que ceux-ci étaient redondants et que les rails se sont débarrassés de .count, mais d'après ce que j'ai compris, .length est une fonction Array qui indique le nombre d'éléments dans le Array et .count qui était une méthode ActiveRecord pour déterminer combien d'éléments du tableau étaient réels enregistrements dans la base de données.

Quelqu'un peut-il nous éclairer à ce sujet?

Répondre

3

C'est question de rubis, pas de rails. Localement, vous avez probablement 1.8.7, et heroku a 1.8.6. La méthode Enumerable#count a été introduite en 1.8.7: comparez http://ruby-doc.org/core-1.8.6/classes/Enumerable.html et http://ruby-doc.org/core-1.8.7/classes/Enumerable.html.

+0

Hey merci pour la réponse rapide et vous avez raison! Il s'avère que je peux migrer mon application (fonctionnant sur Heroku Aspen) vers Heroku Bamboo (qui supporte les versions 1.8.7 et 1.9.1). Voir: http://docs.heroku.com/bamboo. – DJTripleThreat

Questions connexes