Ruby on Rails分页指定按顺序排序依据视图

时间:2015-01-12 20:26:59

标签: ruby-on-rails ruby sorting pagination

在我的rails应用程序中,我通过分页将页面上显示的产品数量限制为6,我希望能够做的是允许用户对结果进行排序/降序排序。我想我需要一个下拉菜单来执行此操作,然后可以通过实例变量将此数据传递给我的products_controller。

在我的application.html.erb视图中,我有一个下拉菜单:

<div id="order-by">
     <select>
        <option value="asc">Ascending</option>
        <option value="des">Descending</option>
      </select>
</div>

但是我不确定如何将所选值传递给我的products_controller.rb,并且在我的products_controller.rb中我将其分配给我:

  def index
   @products = Product.order(:title).page(params[:page]).per(6)
 end

有人可以帮忙吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

您可以将排序参数作为GET请求的一部分传递给控制器​​。控制器需要从请求中提取此参数并应用于排序。

您可以使用带有GET的表单,也可以在发送请求之前使用javascript调整URI。

答案 1 :(得分:0)

快速入侵

<div id="order-by" onchange="sort()">
     <select>
        <option value="asc">Ascending</option>
        <option value="des">Descending</option>
      </select>
</div>

<script type="text/javascript">
    /*This can be simplified using JQuery etc*/
    function sort(){
        var selected=document.getElementById('order-by');
        var val = selected.options[selected.selectedIndex].value;

        window.location =  window.location + "?orderBy="+val;

    }

</script>

Then in the rails controller, you can access the parameter as :

ortOrder = params[:orderBy]