Javascript Rails数据表选择过滤器

Javascript Rails数据表选择过滤器,javascript,jquery,ruby-on-rails,datatable,coffeescript,Javascript,Jquery,Ruby On Rails,Datatable,Coffeescript,我有一个用于SKU的ajax数据表。为此,我使用ajax datatables rails gem。搜索和排序工作得很完美,但现在我试图在表中添加一个过滤函数,但它似乎什么都没做。我将此示例用于筛选函数:。 在本例中,选择框绘制在页脚中,但对我来说,页脚是空的。就像代码根本不运行一样。我也没有得到任何错误 我在我的coffeescrip文件(assets/javascripts/vendor_skus.js.coffee)中初始化了我的datatable,所以我必须将其转换为coffeescri

我有一个用于SKU的ajax数据表。为此,我使用ajax datatables rails gem。搜索和排序工作得很完美,但现在我试图在表中添加一个过滤函数,但它似乎什么都没做。我将此示例用于筛选函数:。 在本例中,选择框绘制在页脚中,但对我来说,页脚是空的。就像代码根本不运行一样。我也没有得到任何错误

我在我的coffeescrip文件(assets/javascripts/vendor_skus.js.coffee)中初始化了我的datatable,所以我必须将其转换为coffeescript。我没有使用coffeescript或将ajax与rails结合使用的经验,所以我有点不知道哪里出了问题

我是如何解决问题的: 标准的选择框在我的情况下是有问题的,因为我在我的表中使用AJAX,而选择框似乎只在客户端表上正常工作。我决定制作自己的自定义过滤器,而不是使用标准的选择框。这些是常规的选择框,如下所示:

<%= select_tag "store-id", options_from_collection_for_select(@stores, "id", "name"), include_blank: true, class:"store-id form-control" %>  
<%= select_tag "status", options_for_select([ "Open", "On Hold", "Cancelled", "Closed", "Error" ]), include_blank: true, class:"form-control", multiple:true %>
在控制器中,确保将参数传递给数据表,如下所示:

respond_to do |format|
  format.html
  format.json { render json: OrderDatatable.new(view_context, { store_id: params[:store_id], status: params[:status] }) }
end
然后在Datatable文件中,使用参数筛选结果。在这种情况下,我使用多选择的状态,所以当选择空白值时,PARAM[[状态] ]存在吗?结果是真的。这就是为什么我添加了一个检查,以查看第一项是否为空字符串

  def get_raw_records
    # insert query here
    query = Order.all
    query = query.status(params[:status]) if params[:status].present? && (params[:status].count == 1 && params[:status][0] == "") == false 
    query = query.store(params[:store_id]) if params[:store_id].present?
    query.joins(:store)
  end

我在执行此操作时遇到了相同的问题。我发现问题在于这一行:

column.search((if val then '^' + val + '$' else ''), true, false).draw()
其中,coffee脚本不喜欢以下内容:

,对,错

这样拆下后:

column.search(if val then '^' + val + '$' else '').draw()
一切都很顺利。需要注意的是,我不是一个javascript/coffeescript的家伙,所以结果的负面影响超出了我的范围。但和你一样,我目前正在努力让所有结果显示在可选择的下拉过滤器中。它只显示当前数据页中的任何唯一值-这没有帮助

仅供参考,若要对此进行分页,请转到datatable.rb文件,并取消注释顶部指向您正在使用的分页的正确行。我使用“will_paginate”作为引导,因此我的引导看起来如下:

  include AjaxDatatablesRails::Extensions::WillPaginate

希望有帮助。顺便问一下,您是否找到了在选择过滤器中显示所有结果的方法?

(1)如果您不想,您不必使用CoffeeScript,您仍然可以使用纯JavaScript。(2) 这是你咖啡脚本中的缩进吗?我更新了缩进。尝试使用纯javascript,但它没有考虑分页(因此只有第一页的值在下拉列表中是可选的)。此外,下拉列表中的值与我的表中的值不相等,因此搜索结果始终为0。我想我会考虑建立一个自定义过滤器我最终创建了自己的自定义过滤器。事实上,我发现这很容易做到,我现在有一个可折叠面板,在我的datatable上面有一个过滤器,它将它们的值传递给datatable,并在更改时重新绘制该表。很好用!你介意举个例子吗?或者任何在线文档都可以帮助别人做同样的事情?好了,伙计。希望这有帮助!
  include AjaxDatatablesRails::Extensions::WillPaginate