【发布时间】:2019-03-01 19:12:49
【问题描述】:
我正在尝试通过视图中的:id 来订购记录。我在控制器中有:id 排序的记录,就像这样
@bands = Band.where(available: true).order(:id)
应用启动时一切正常,但随着记录的更新,排序行为变得不稳定。大多数情况下,最近编辑的记录会移到最后,但并非总是如此。这不应该发生,因为记录是由 :id 排序的,不应该改变
对于上下文,在视图中类似于
<% @bands.each do |b| %>
<%= b.name %>
<% end %>
另外请注意,在 Rails 控制台中,这两个都返回正确排序的结果(这使得这个问题更加陌生):
ActiveRecord::Base.connection.execute("SELECT * FROM bands WHERE available = 'true' ORDER BY id")
和
Band.where(available: true).order(:id)
另外请注意,当我加载index 视图并观察rails 服务器时,我可以看到结果不是 的顺序正确。
我还可以看到已经执行的sql查询,它忽略了order部分,它根本没有在查询中提到任何顺序
【问题讨论】:
-
首先,为了确定,停止您的 Rails 服务器(并停止/杀死任何
spring进程),然后重新启动它。假设这不能解决问题 - 请显示更多代码,复制/粘贴完整的索引操作,加上显示正在运行的 SQL 查询的日志,您的Band模型是否也有任何default_scope? -
您确定您使用的
@bands来自@bands = Band.where(available: true).order(:id)? -
@muistooshort 你是对的。我在不同的控制器操作中编辑了一个实例变量(同名)
标签: ruby-on-rails activerecord ruby-on-rails-5