Skip to main content
 首页 » 编程设计

jquery之Rails 中的服务器端数据表

2026年09月08日2mfryf

我在 Rails 4 应用程序中使用 DataTables 进行服务器端处理。我的 ajax 源从数据库返回准确的数据记录。分页在 html 端起作用,即第 1 页显示 800 个条目中的 1-10 个,第 2 页显示 800 个条目中的 11-20 个,依此类推。然而表中的实际记录是相同的10条结果。我不知道它是否只是重新绘制表格,每页有相同的 10 条记录,因为我错过了一些东西或什么。

有谁知道为什么我每页返回相同的 10 条记录?任何见解都非常感激。提前致谢。

gem 文件:

gem 'will_paginate' 
gem 'jquery-datatables-rails', github: 'rweng/jquery-datatables-rails' 

Controller :

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

房主数据表:

class HomeownersDatatable 
delegate :params, :link_to, to: :@view 
 
def initialize(view) 
    @view = view 
end 
 
def as_json(options = {}) 
    { 
        sEcho: params[:sEcho].to_i, 
        iTotalRecords: Homeowner.count, 
        iTotalDisplayRecords: homeowners.total_entries, 
        aaData: data, 
    } 
end 
 
private 
def data 
    homeowners.map do |homeowner| 
        [ 
            link_to(homeowner.name, @view.edit_admin_homeowner_path(homeowner.id)), 
            # (homeowner.name), 
            (homeowner.id), 
            (homeowner.email), 
            (homeowner.address), 
            (homeowner.zip_code), 
        ] 
    end 
end 
 
def homeowners 
    @homeowners ||= fetch_homeowners 
end 
 
def fetch_homeowners 
    homeowners = Homeowner.order("#{sort_column} " "#{sort_direction}") 
    homeowners = homeowners.page(page).per_page(per_page) 
    if params[:sSearch].present? 
        homeowners = homeowners.where("name like :search or email like :search", search: "%#{params[:sSearch]}%") 
    end 
    homeowners 
end 
 
def page 
    params[:iDisplayStart].to_i/per_page + 1 
end 
 
def per_page 
    params[:iDisplayLength].to_i > 0 ? params[:iDisplayLength].to_i : 20 
end 
 
def sort_column 
    columns = %w[id email] 
    columns[params[:iSortCol_0].to_i] 
end 
 
def sort_direction 
    params[:sSortDir_0] == "DESC" ? "DESC" : "ASC" 
end 

结束

JS 初始化表:

$(document).ready(function() { 
  $('#homeowners_admin_table').DataTable({ 
    "pagingType": "full_numbers", 
    "stateSave": true, 
    "processing": true, 
    "serverSide": true, 
    "ajax": $('#homeowners_admin_table').data('source'), 
  }); 
}); 

请您参考如下方法:

我也遇到了同样的问题。我通过改变来解决这个问题:

$('#table').DataTable({{...})  

对于:

$('#table').dataTable({{...}).  

这只是关于数据表版本。