2016-07-28 8 views
0

Railsコントローラでは、redirect_to 1ページおきに2つの別々のページが読み込まれますか?Railsは毎回2つの異なるページの1つをレンダリングします

事のこのタイプを行うだろう何か:

class HomePageController < ApplicationController 
    def index 
     50% of the page-loads do 
     redirect_to '/foo' 
     else 
     redirect_to '/bar' 
     end 
    end 
end 

はRailsのコントローラで可能なもののこの種のですか?ありがとう!

+0

を(ユーザーに関係なく、他のすべての要求が反転すると仮定して)あなたが意味するか、あなたは同時に1つのコントローラ内の2つのページをレンダリングしたいですか?それが目的ならば、コントローラーではなくパーシャルを使用してください。あなたの条件が満たされている場合、ルートでリダイレクトしたいのですか?はい、あなたのコードがやっているようにすることができます。 – araratan

答えて

0

はい、あなたは条件付きであなたのRailsのコントローラ内と、次はあなたの擬似コードの「本物」の一例であるとしてリダイレクトすることができます。

def index 
    if rand(2) == 1 
    redirect_to '/foo' 
    else 
    redirect_to '/bar' 
    end 
end 

ただし、多変量テストを行うために探している場合は、これは完全な解決策ではありません。同じユーザーが2回訪問してもページが変わる可能性があります。これは非常に混乱している可能性があります。 splitのような宝石を探したり、少なくともセッション(またはクッキー)に表示されているページを保存することができます。

+0

これは1回おきに訪問するたびに反転するのではなく、そのたびにフリップする確率は50%です。 OPはあまり明確ではありませんでしたが、私はこれが彼が望むものだとは思わない。 –

+0

@KieranE:ええ、OPの意図に完全に依存しています。私は 'HomePageController'の'#index'アクションにあったという事実が、2つの異なるホームページをテストしたいと思っていると感じました。 –

0

コントローラはこの種のことを全く知らないので、この種のことをDBやセッションに残す必要があると思います。

しかし、他のすべてのリクエスト、または特定のユーザーごとに1ページおきに新しいページを配信しますか? user Aが訪問した場合は、またはuser bと表示されますか?を参照すると、user Bが訪問しますか?これにより、セッションまたはDBを使用する必要があるかどうかがわかります。

とにかく、ここにあなたが何をすべきかのいくつかの擬似コードだ

def index 
    # A currently non-existent model that tracks visits 
    if Visitor.count.even? 
    render 'page_1' 
    else 
    render 'page_2' 
    end 

    Visitor.create(<whatever information you want to store>) 
end 
関連する問題