使用Heroku,Rails排序在updated_at时间戳列

时间:2015-04-25 19:54:16

标签: ruby-on-rails postgresql heroku

我在Heroku上使用PostgreSQL创建了一个Rails 4.0 APP。我试图显示一个表是我的XLog或事务日志,以updated_at时间戳的相反顺序显示最后五个条目。这在我的本地系统上正常工作。当我把它推到Heroku时,它排序不正确。

我检查了Heroku数据库定义,该列被正确列为时间戳。我已将Heroku代码克隆回我的机器并验证它与我推送的相同。在这一点上,我不知道为什么它在Heroku工作时不起作用。建议将不胜感激。

FWIW,远程数据库和本地数据库没有相同的数据。

代码是:(添加了log_sort的最后一行作为断点,仍会传递正确的结果。)

  def self.last_objects object, count
    logs = XLog.where(object: object).last(count)
    log_sort = logs.sort_by{|log| log.updated_at}.reverse
    log_sort
  end

在执行断点期间,您可以看到传递的变量:

Code

这是具有正确排序的本地结果:

Local result

这是Heroku结果,排序错误:

Heroku result

这是updated_at的Heroku PostgreSQL表定义:

PostgreSQL table

编辑:查看:

<% xlog = xlog_last(car.stock_number, 5) %>
...
<% xlog.each do |log| %>
    <tr>
      <td><%= log.associate  %></td>
      <td><%= log.proxy      %></td>
      <td><%= log.action     %></td>
      <td><%= log.status     %></td>
      <td><%= log.message    %></td>
      <td><%= log.value      %></td>
      <td><%= log.updated_at %></td>
    </tr>
<% end %>

助手:

  def xlog_last(object, count)
    XLog.last_objects object, count
  end

编辑: 我修改了sort_by以使用order方法,如下所示。结果根本没有变化。发生了相同的排序错误,并以完全相同的方式显示完全相同的数据:

新代码:

def self.last_objects object, count
  logs = XLog.where(object: object).order(updated_at: :desc).first(count)   
end

1 个答案:

答案 0 :(得分:0)

我相信你需要使用order来影响实际的sql查询。现在您正在使用sort_by,它在您从数据库读入数据后对数据进行排序。 db中的顺序基于它的插入方式,可能与heroku和本地系统不同。从heroku导出然后导入它时,表的顺序可能也会改变。