我有一个Rails 3应用程序,当前每次刷新都会显示一条“随机”记录,但是,它会经常重复记录,或者永远不会显示特定记录。我想知道循环每个记录并显示它们以便在重复之前显示所有记录的好方法。我在想某种方式使用cookies或session_ids来顺序循环记录id,但我不确定这是否正常,或者确切地说如何去做。
数据库由一个包含单个列的表组成,目前只有大约25个条目,但会添加更多条目。 ID是自动生成的并且是顺序的。
一些建议将不胜感激。
感谢。
答案 0 :(得分:1)
关于'随机'的有趣之处在于,当你连续两次得到相同的答案时,它通常不会感觉随机。
此问题的常见答案是生成响应队列,并确保在向队列添加条目时它们尚未在队列中。这可以是您将返回给用户的条目队列,也可以是已经返回给用户的条目队列。我喜欢你使用记录ID的想法,但只有25个条目,重复循环也会很烦人。 :)
如果你已经部署了一个队列,你可以跟踪memcached中先前条目的队列,或者你可以将队列填充到会话中(它可能只是五或六个整数,而不是过多的数据传输)或数据库。
我认为我会避免使用数据库,因为它确实不需要持久化,不需要占用数据库带宽或计算时间,而使用数据库只是为了跟踪五六个整数似乎愚蠢。 :)
更新:
在您的某个控制器中(可能是ApplicationController
),将这样的内容添加到您在before_filter
中运行的方法中:
class ApplicationController < ActionController::Base
before_filter :find_quip
def find_quip:
last_quip_id = session[:quip_id] || Quips.find(:first).id
new_quip_id = Quips.find(last_quip.id + 1).id || Quips.find(:first)
session[:quip_id] = new_quip
end
end
当你的讽刺用完时,我对代码的使用并不满意;如果序列中有一个洞,它会完全搞砸。哪一天可能会发生。它将从2号开始。但是我太累了,无法解决它。 :)
答案 1 :(得分:0)
如果只有不像你说的那么多,你可以将整个ID数组存储为会话变量,并为当前索引存储另一个变量,并按顺序循环它们,递增索引。