Rails 中应用bootstrap datatables的应用

第一次使用bootstrap 实在ruby on rails 框架中使用的,主要用于数据的统计。bootstrap中的datatables的是做表格的一大利器。今天就来说说这个datatables的应用
   1. 将所有的分页,查询等都交给前端来处理,这种做法的好处是简单明了。但是可能当数据量很大的情况时,会出现问题。但是亲测10w条数据datatables都是可以轻松搞定的
      1.1操作步骤1:书写页面如
       Rails 中应用bootstrap datatables的应用_第1张图片
     1.2 在对应的controller的action中书写业务逻辑,具体代码就不贴出了
     1.3 根据页面的id 去书写相应的js
       Rails 中应用bootstrap datatables的应用_第2张图片  这样就轻松的完成一个datatables ,然后根据业务需求去修改参数如是否分页,是否支持查询等


2.将分页和查询都放都放到后台来处理
   2.1 书写页面:
    Rails 中应用bootstrap datatables的应用_第3张图片
  2.2  书写js 代码
      Rails 中应用bootstrap datatables的应用_第4张图片
  2.3书写datatable 文件
     class OnlineCustomerStatisticsDatatable
  delegate :params, :session, :raw, :link_to, :number_to_currency, :best_in_place, to: :@view
  def initialize(view, current_statistics_user)

    @view = view
    @current_user = current_statistics_user

  end

  def as_json(options = {})
    {
        sEcho: params[:sEcho].to_i,
        iTotalRecords: fetch_data_count,
        iTotalDisplayRecords: fetch_data_count,
        aaData: data
    }
  end

  private
  def data
    get_datas.map do |data|
      rows = []
      rows << data[:customer_mobile]
      rows << data[:created_at].strftime('%Y-%m-%d')
      rows << data[:billnumber]
      rows << raw("")
      rows
    end
  end

  #重新组装查询的结果
  def get_datas
    @new_arry=[]
    data_arr ||= fetch_datas
    data_arr.each do |data|
      aa={}
      aa[:customer_id]=data.customer_id  #会员id
      aa[:billnumber]=OrderStateChange.where({'customer_id'=>aa[:customer_id],'state'=>{'$in' => ['receive','completed']}}).count #根据会员id 统计下订单的次数
      aa[:customer_mobile]=data.customer_mobile
      aa[:created_at]=data.created_at
      @new_arry<<aa
    end
    @new_arry
  end
 #根据分页来查询
  def fetch_datas
    @data=OrderStateChange.where(get_search_params).order("#{sort_column} #{sort_direction}").page(page).per(per_page)
  end
 #计算数据长度
  def fetch_data_count
    @data_count ||= OrderStateChange.where(get_search_params).count
  end

  #拼接查询条件
  def get_search_params

    search_params = {}
    beginTime = params[:order_start]
    endTime = params[:order_end]
    bill_number= params[:bill_number]

    search_params = {}
    search_params[:created_at.gte] = Time.zone.parse(beginTime) if beginTime.present?
    search_params[:created_at.lte] = Time.zone.parse(endTime) if endTime.present?
    search_params[:bill_number.eq] = bill_number if endTime.present?

    search_params[:state.in]= ['receive','completed']
    search_params[:userinfo_id.in]=@current_user.userinfos_ids
    search_params

  end
 //多少页
  def page
    params[:iDisplayStart].to_i/per_page + 1
  end
 // 每页多少条数据 
  def per_page
    params[:iDisplayLength].to_i > 0 ? params[:iDisplayLength].to_i : 25
  end
  // 索引列 不用修改
  def sort_column
    columns = %w(shopname date customernumber)
    columns[params[:iSortCol_0].to_i]
  end
   //升序还是将序排列 不用修改
  def sort_direction
    params[:sSortDir_0] == "desc" ? "desc" : "asc"
  end
end
这样就可以是实现这个datatables 啦  具体datatables的 参数请看下节

你可能感兴趣的:(Bootstrap)