2016-07-28 96 views
0

在Rails控制器中,我可以redirect_to每隔一頁加載兩個單獨的頁面之一嗎?Rails每隔一次渲染兩個不同的頁面之一

東西會做這種類型的事情:

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

就是這種類型的東西可能在Rails控制器?謝謝!

+0

你的意思,你想在同一時間呈現在一個控制器兩頁?如果這是你的目的,使用partials而不是在控制器上做。如果你想在路線中重定向,如果你的條件滿足?是的,你可以像你的代碼所做的那樣做。 – araratan

回答

0

是的,你可以有條件地在Rails控制器內和重定向等下面是你的僞代碼是「真實」的例子:

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

但是,如果你正在尋找做多變量測試,這不是一個完整的解決方案。即使同一用戶訪問過兩次,該頁面也可能會發生變化,這可能會讓人迷失方向。您可能希望查看諸如split之類的寶石,或者至少存儲用戶在會話中看到的頁面(或cookie)。

+0

這不會影響其他每次訪問,而是每次都有50%的翻頁機會。 OP不是很清楚,但我不認爲這是他想要的。 –

+0

@KieranE:是的,完全取決於OP的意圖。我覺得它是在'HomePageController'的'#index'動作的事實表明他只是想測試兩個不同的主頁。 –

0

我相信你需要在數據庫或會話中堅持這種事情,因爲控制器完全不瞭解這類事情。

但是,您是否希望它爲每個其他請求或每個其他請求提供給特定用戶的新頁面?如果user A訪問,然後user B訪問,他們都應該看到page 1或應該user b看到page 2?這會告訴你是否需要使用會話或數據庫。

不管怎樣,下面是你應該做的一些僞代碼(假設所有其他要求翻轉,無論用戶)

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