从控制器中的rails操作打开新的浏览器选项卡

时间:2011-02-25 05:52:45

标签: ruby-on-rails-3 rendering

所以我有一个考试控制器。现在它的文件上有一个jqgrid(index.html.erb)。单击网格行,我已设置了用于处理事件的javascript。 它看起来像

<script type= "text/javascript">
function handleSelection(id) {
    <%=  
    remote_function :url => render_exam_exams_path,:with => "'id='+id" 
    %>
}
</script>

现在我正在测试的方法如下

def render_exam
    @exams = Exam.find(params[:id])
    #either
    #redirect_to home_index_path
    #or open this in new browser tab        
    #render :action => "render_exam"
end

我也有一个名为render_exam的视图。现在我检查了服务器日志和所有,一切正常,甚至生成了render_exam,因为我可以在chrome开发人员插件中看到。现在问题是我想要

  1. 控制器动作render_exam打开一个新选项卡并渲染render_exam视图,因为它似乎远程发生(生成render_exam视图和所有视图)而不更改jqgrid页面。但是我找不到一种方法来打开一个新的浏览器选项卡来渲染render_exam动作本身的render_exam动作视图,而不是发生在场景后面。 或
  2. 将jqGrid(或索引视图)页面重定向到render_exam视图。现在问题是redirect_to动作在视图中不起作用,因为它应该是控制器方法。所以我不能说。

  3. <script type= "text/javascript">
    function handleSelection(id) {
        <%= redirect_to :action => render_exam_exams_path, :with => "'id='+id"  %>
    }
    </script>
    

    否则问题就解决了。 任何帮助表示赞赏 感谢

1 个答案:

答案 0 :(得分:0)

首先,您无法在同一操作中重定向和呈现,因为每个操作只有一个响应。第二次打开一个新选项卡是客户端功能(由您的浏览器控制),您需要在链接中使用类似“”target = _blank的内容,这将打开一个新的浏览器,而后者将请求一个页面(在您的情况下为render_exam_exams_path)来自服务器。