【发布时间】:2015-10-25 23:48:24
【问题描述】:
我已经将我的 jQuery DataTable 从客户端转换到服务器端,以更快地加载 1000 多个数据。
但是我在如何实现服务器端搜索时遇到了困难,因为不是一次加载所有数据。
我在关注 railscast (http://railscasts.com/episodes/340-datatables)
app/datatables/wine_list_datatable.rb
class WineListsDatatable
delegate :params, :link_to, :number_to_currency, :content_tag, to: :@view
def initialize(view)
@view = view
end
def as_json(options = {})
{
sEcho: params[:sEcho].to_i,
iTotalRecords: WineList.count,
iTotalDisplayRecords: wine_lists.total_entries,
aaData: data
}
end
private
def data
wine_lists.map do |wine_list|
[
(wine_list.vintage),
(wine_list.name),
(wine_list.region),
(wine_list.country.name),
(wine_list.wine_maker.name),
link_to('profile', wine_list.wine_maker),
(wine_list.score),
link_to('delete', wine_list, :method => "Delete", data: {confirm: "Are you sure?"}),
link_to('edit', [:edit, wine_list])
]
end
end
def wine_lists
@wine_lists ||= fetch_wine_lists
end
def fetch_wine_lists
wine_lists = WineList.order("#{sort_column} #{sort_direction}")
wine_lists = wine_lists.page(page).per_page(per_page)
if params[:sSearch].present?
wine_lists = wine_lists.where("name like '%?%'", search: params[:sSearch])
end
wine_lists
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
end
我感到困惑的那一行是在
wine_lists = wine_lists.where("name like '%?%'", search: params[:sSearch])
目前,我收到 2 个错误。
DataTables 警告:表 id=wine_lists - Ajax 错误。有关此错误的更多信息,请参阅http://datatables.net/tn/7
谢谢!
【问题讨论】:
标签: jquery ruby-on-rails ruby ajax datatable