【问题标题】:Ruby on Rails pagination Specify Sort By Order By on viewRuby on Rails 分页在视图中指定按顺序排序
【发布时间】:2015-03-10 16:53:58
【问题描述】:

在我的 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

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

【问题讨论】:

    标签: ruby-on-rails ruby sorting pagination


    【解决方案1】:

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

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

    【讨论】:

    • 我该怎么做?我对红宝石很陌生
    • 您尝试的最简单的选项是将“onchange”事件添加到选择框,当用户选择您更改的选项时,您将所选参数附加到 url 并使用 window.location 刷新页面.类似于:window.location = window.location +"?sortOrder='+selected_value
    • 对不起,我是 Ruby on Rails 的新手,请您编辑我的代码,让我看看它应该是什么样子。
    【解决方案2】:

    在这里快速破解

    <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]
    

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多