postgresql中的Rails有序列表是无序的

postgresql中的Rails有序列表是无序的,postgresql,activerecord,ruby-on-rails-4,rails-activerecord,Postgresql,Activerecord,Ruby On Rails 4,Rails Activerecord,我在rails中有一个a.each.Do循环,它在MySQL上运行良好,但当我将它上传到Heroku(因此也就是Postgres)时,它无法正常工作 我想按时间订购,最好是最新的在顶部。下面是我的第一段代码: <% @envelope.transactions('created_at DESC').reverse.each do |transaction|%> 当我注意到Postgresql的问题时,我环顾四周,将代码切换到以下代码,它似乎在mysql上仍然有效,但在Herok

我在rails中有一个a.each.Do循环,它在MySQL上运行良好,但当我将它上传到Heroku(因此也就是Postgres)时,它无法正常工作

我想按时间订购,最好是最新的在顶部。下面是我的第一段代码:

<% @envelope.transactions('created_at DESC').reverse.each do |transaction|%>

当我注意到Postgresql的问题时,我环顾四周,将代码切换到以下代码,它似乎在mysql上仍然有效,但在Heroku上仍然无效:

<% @envelope.transactions(:order=>'DATE(created_at) DESC').reverse.each do |transaction|%>
'DATE(created|at)DESC')。反向。每个do |事务|%>
不管怎么说,我很困惑,主要是因为我对数据库一无所知。我如何让Postgres响应我在Rails 4中的请求,让最新的一个位于顶部

谢谢

更新:

下面是一些示例输出,作为我所说的示例:

我输入了3个东西,并正确输入:

您可以在以下地点亲自尝试:

用户名:test@test.com 密码:test123456

更新2

我在我的开发pc(使用mysql)上重新创建了上述情况,以下是我得到的详细信息:

如您所见,信封1是在3:25:06创建的 如您所见,信封2是在3:25:11创建的 如您所见,信封3是在3:25:19创建的

以下是编辑中的数据:

然后在更改之后:

如您所见,信封1是在3:25:06创建的 如您所见,信封2是在3:25:11创建的 如您所见,信封3是在3:25:19创建的


所以它没有改变。那么为什么postgresql不能正确地对实例排序呢?

大概您有这样的模型:

class Transaction < ActiveRecord::Base
  belongs_to :envelope
end
class Envelope < ActiveRecord::Base
  has_many :transactions
end
这件事不包括向数据库发送订单。如果你不告诉数据库你想要什么样的顺序,那么你不应该期望它们以任何特定的顺序出现;您在本地MySQL中看到的结果可能是偶然的,也可能是MySQL实现的细节

如果您想按特定顺序获取数据,请说:

@envelope.transactions.order('created_at desc').reverse
或者只需按升序排列,然后跳过反向的

@envelope.transactions.order(:created_at).reverse

顺便说一句,在一个数据库上开发,然后在另一个数据库上部署,这会导致灾难。无论市场宣传如何,ActiveRecord都不会为您提供数据库可移植性。

什么是
@envelope
?什么是
@envelope.transactions
?如果数据未按预期排序,您是否可以发布PostgreSQL的样本输出?但时间戳值是多少?什么是信封?这是什么
交易
方法?谢谢!这对我的整个项目有很大帮助,这是我最不了解的一条线,但现在看到我没有真正传递我认为的论点,一切都很清楚,谢谢!一个方便的技巧是在控制台的末尾添加一个
to_SQL
调用(
envelope.transactions.to_SQL
)。当然,这是假设您知道足够的SQL来知道您在寻找什么。
@envelope.transactions.order(:created_at).reverse