2014-02-25 37 views
1

我有一個rails 4應用程序,有太陽黑斑寶石,並使用json響應數據表jQuery插件。我鬆散以下這railscast:http://railscasts.com/episodes/340-datatables分頁和orderby與數據表

我在我的控制器指數看起來像現在這樣:

def index 
    @search = Product.search do |query| 
    query.fulltext params[:sSearch] 
    query.with(:store_id, @collection.id) 
    query.paginate(:page => params[:page] || 1, :per_page => 35) 
    end 
    @products = @search.results 


    @headers = @products.map(&:data).flat_map(&:keys).uniq 
    @product_data = @products.map{ |product| product[ :data ].values } 

    respond_to do |format| 
    format.html 
    format.json do 
     render :json=> { 
     "sEcho"    => params[:sEcho].to_i, 
     "iTotalRecords"  => @products.count, 
     "iTotalDisplayRecords"=> @products.count, 
     "aaData"    => @product_data.as_json 
     } 
    end 
    end 
end 

現在,我試圖讓排序和分頁與搜索塊我有工作,但我無法弄清楚如何去做。所以基本上我試圖採取這種代碼:

def fetch_products 
    products = Product.order("#{sort_column} #{sort_direction}") 
    products = products.page(page).per_page(per_page) 
end 

def page 
    params[:iDisplayStart].to_i/per_page + 1 
end 

def per_page 
    params[:iDisplayLength].to_i > 0 ? params[:iDisplayLength].to_i : 10 
end 

def sort_column 
    columns = %w[name category released_on price] 
    columns[params[:iSortCol_0].to_i] 
end 

def sort_direction 
    params[:sSortDir_0] == "desc" ? "desc" : "asc" 
end 

併合並它與我已經有。

感謝您的幫助!

回答

0

它看起來像你正在試圖在你的控制器中做所有事情,並且很少提及你的數據表。

如果你想用太陽黑子然後在數據表中進行搜索,更改以下行

def fetch_products 
    products = Product.order("#{sort_column} #{sort_direction}") 
    products = products.page(page).per_page(per_page) 
    if params[:sSearch].present? 

    @search = Product.search do |query| 
    query.fulltext params[:sSearch] 
    query.with(:store_id, @collection.id) 
    query.paginate(:page => params[:page] || 1, :per_page => 35) 
    end 
    products = @search.results 
    end 
    products 
    end 

在你的控制器,

def index 
    respond_to do |format| 
    format.html 
    format.json { render json: ProductsDatatable.new(view_context) } 
    end 
end 

保持其他代碼在datatable,因爲它是。