我正在尝试实现一个“随机页面”链接,它将向用户呈现来自数据库的随机文章。我尝试了两种不同(但相似)的方法,在这两种方法中,我都将 URL“/random”路由到 ArticleController 中的“random”方法。这是第一个:
def random
offset = rand(Article.published.size)
@article = Article.published.offset(offset).first
render :action => 'show'
end
这适用于提供随机文章,但有两个问题:首先,URL 没有更新到正确的文章,因此用户无法复制链接或为文章添加书签;其次,之前浏览过的随机文章不会显示在浏览器的后退按钮的历史记录中(即按“后退”将用户带回到他们第一次单击“随机”之前所在的页面)。
第二种方法替换render
为redirect_to
:
def random
offset = rand(Article.published.size)
@article = Article.published.offset(offset).first
redirect_to @article
end
这解决了第一个问题 - 它是一个重定向,因此浏览器实际上被重定向到随机选择的文章的适当 URL(因此它可用于复制/添加书签)。但是,后退按钮的问题仍然存在。此外,为这样的事情选择 HTTP 重定向感觉有点不对劲。
提供随机文章,同时显示文章的正确 URL 并维护浏览器历史链的最佳方式是什么?