データベースからランダムな記事をユーザーに表示する「ランダムページ」リンクを実装しようとしています。私は 2 つの別々の (しかし同様の) アプローチを試しました。どちらの方法でも、URL "/random" を ArticleController の "random" メソッドにルーティングします。最初は次のとおりです。
def random
offset = rand(Article.published.size)
@article = Article.published.offset(offset).first
render :action => 'show'
end
これはランダムな記事を提供する場合には機能しますが、2 つの問題があります。まず、URL が正しい記事に更新されないため、ユーザーはリンクをコピーしたり、記事をブックマークしたりできません。次に、以前に閲覧したランダムな記事はブラウザの戻るボタンの履歴に表示されません (つまり、[戻る] を押すと、ユーザーは最初に [ランダム] をクリックする前のページに戻ります)。
2番目のアプローチは次のように置き換えrender
られredirect_to
ます:
def random
offset = rand(Article.published.size)
@article = Article.published.offset(offset).first
redirect_to @article
end
これにより、最初の問題が修正されます。これはリダイレクトであるため、ブラウザーは実際には、ランダムに選択された記事の適切な URL にリダイレクトされます (したがって、コピー/ブックマークに使用できます)。ただし、[戻る] ボタンの問題は依然として残っています。さらに、このようなものに HTTP リダイレクトを採用するのは少し間違っているように感じます。
記事の正しい URL を表示し、ブラウザの履歴チェーンを維持しながら、ランダムな記事を提供するための最良の方法は何でしょうか?