2016-07-28 73 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