我添加了 Next 和 Previous 按钮来循环查看 Rails 3.2 应用程序上的资源。 Next 和 Previous 应该只是通过 ID 循环。
“上一个”按钮按预期工作:它是指向(当前 ID 减 1)的链接。
但是,“下一步”按钮链接到任意 ID 号。对于任何小于 17 的 ID,“下一步”按钮链接到 ID 号 17。单击该按钮将显示链接到 31、45、58、59、65、82、108、115、120、127、128、129 的“下一步”按钮, 131, ... 从那里开始,差距不那么频繁了,但仍然会出现。
该资源称为 Lecture,因此这是 app/models/lecture.rb 的相关部分:
def previous
Lecture.where(["id < ?", id]).last
end
def next
Lecture.where(["id > ?", id]).first
end
这是 View ,app/views/lectures/show.html.erb:
<li class="previous">
<%= link_to "Previous", @lecture.previous if @lecture.previous.present? %>
</li>
<li class="next">
<%= link_to "Next", @lecture.next if @lecture.next.present? %>
</li>
Resource lecture的生产数据其实是从1到173的连续ID。
我怀疑这是与批量编辑我的生产数据有关的问题,但我想不出任何方法来确定。我在 Heroku/postgres 上。
最佳答案
由于您使用的是 Heroku Postgres,因此适用标准 SQL 陷阱:
除非您明确指定顺序,否则 SQL 查询返回的记录顺序是未定义的。
您的 previous
和 next
代码假定查询结果将按 ID 排序,但这不是您返回的内容; Postgres 会在最方便的地方返回任何最方便的记录。
链接一个简单的 order
在您的查询上将按照您期望的顺序为您提供记录:
Lecture.where(["id < ?", id]).order('id').last
(当然,您可以将 id
替换为任何其他列,如果按其他一些条件遍历记录更有意义的话。)
关于ruby-on-rails - 向 Rails View 添加了下一个/上一个按钮。为什么 Next 会跳过某些实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20508815/