【发布时间】:2015-07-17 07:39:07
【问题描述】:
我有一个简单的 dataTables 解决方案,使用 ajax-datatables-rails gem。它工作得很好,但我现在正在尝试实现一个解决方案,我可以在其中更新现有的数据表,并使用从自定义搜索表单调用的单独操作的结果。在我当前的代码中,控制器操作的一部分如下所示:
respond_to do |format|
format.html
format.json { render json: CasefileDatatable.new(view_context, {:user_id => current_user.id}) }
end
(目前没有使用user_id,只是测试从控制器传入...Datatable类)
CasefileDatatable 我有以下内容:
def data
records.map do |record|
[
record.county.county_name,
record.date.strftime("%m/%d/%y"),
record.case_number,
record.primary_property_address,
record.table_json.to_s
]
end
end
def get_raw_records
Casefile.all
end
最后一列 record.table_json.to_s 被隐藏。它包含我在后续处理中需要的内容。
Javascript:
var casefileTable = $('#casefiles-table').DataTable({
"processing": true,
"serverSide": true,
"ajax": $('#casefiles-table').data('source'),
"stateSave": false,
"pagingType": 'full_numbers',
columns: [
{data: '0'},
{data: '1'},
{data: '2'},
{data: '3'}
]
});
这一切都很好。然后我开始添加一个自定义搜索表单,因为这个模型更广泛,并且需要能够搜索可选属性,使用连接等跨多个模型。所以,我有另一个操作从表单中字段这个 ajax 请求然后在第一次尝试中使用 jbuilder 返回 json。我的策略是使用dataTable API直接操作现有的dataTable,并在我的表单中添加了相关的js调用... ajax:success handler,像这样:
//this seems to trigger a reset/refresh, so I arrive where I started
$('#casefiles-table').dataTable().fnClearTable();
$('#casefiles-table').dataTable().fnAddData(data);
然后是这些 dataTable 调用,它们什么也没做:
...
var dt = $('#casefiles-table').DataTable();
dt.clear().draw();
dt.rows.add(data);
dt.draw();
...
然后我突然想到,也许我可以返回一个不同的 Datatable 类,并在我的控制器中执行所有 AR 查询内容,然后传入 ActiveRecord_Relation 对象,然后在新的 CasefileSearchDatatableClass 中使用它,比如这个:
控制器动作返回:
render json: CasefileSearchDatatable.new(view_context, {:query => finder})
然后在CasefileSearchDatatable类get_raw_records:
def get_raw_records
results = options[:query]
# following line was just to test passing in the query via options
# p "search raw records results: #{results.size}"
results
end
这类作品;正如 sql 日志和我的 p 语句所证明的那样,查询被触发了,但是,数据表没有用结果更新,也没有被清除;保持完全不变。
因此,我正在尝试找到更新此表的最佳方法,使用上述方法之一或在必要时使用完全不同的方法。此外,假设第一个目标是可能的,不确定如何最好地处理分页。感谢您的任何指点。
【问题讨论】: