Heroku nil类错误

时间:2014-06-24 21:11:22

标签: ruby-on-rails postgresql heroku ruby-on-rails-4

我只是将我的本地Rails 4应用程序推送到Heroku,我有一个奇怪的错误。通常情况下,它在本地工作正常,没有问题。我认为Heroku数据库/环境基本上与本地相同(据我所知!)

Heroku日志中的错误是:ActionView::Template::Error (undefined method 'empty?' for nil:NilClass)

它试图判断某个关联是否为empty - 如果empty显示无结果部分 - 如果它不是empty则会循环显示结果并显示结果部分为每个。

控制器:

@polls     = Poll.where('team_id = ? AND expires_at >= ?', params['id'], DateTime.now())

查看:

<% if @polls.empty? %>
    <%= render partial: "noresults" %>
<% else %>
    <% @polls.each do |p| %>
        <%= render partial: "poll", locals: {poll: p} %>
    <% end %>
<% end %>

我打开了一个Heroku控制台并运行了@polls查询,该查询返回了一个正确的关联,我可以使用empty?进行测试,并且它按预期工作。

有什么想法会导致这种情况吗?

编辑:

的database.yml

production:
  adapter: postgresql
  encoding: unicode
  pool: 5

1 个答案:

答案 0 :(得分:0)

数据

你遇到的问题是你在一个尚未设置的变量/数据对象上调用.empty?

当您部署到其他环境时,这是一个标准问题,因为它没有您在开发中填充的数据。这可能是由于您的production数据库未被填充(没有记录),或者您实际上没有连接生产数据库(不太可能)

要解决此问题,您要么确保设置polls,要么在if声明中添加其他条件:

 <% if !@polls.present? || @polls.empty? %>
     <%= render partial: "noresults" %>
 <% else %>
     ...
 <% end %>

<强>原因

最重要的原因是您的变量不会被填充,导致您的应用程序无法调用您需要的方法。这是Rails应用程序的标准问题(不仅仅是在Heroku上运行的应用程序)

要解决它,您基本上需要验证对象是否存在。一种方法是使用我在上面概述的条件方法,或者您可以使用.blank?建议的Niall