我正在我的rails
应用程序中使用datatable
到用户index
页面。我的 index
页面中的第一列
是created_at
。此列
中的数据
看起来像Mon, 17-Oct-2016
。我想让此列应根据 desc
order
中的日期格式进行排序。我怎样才能做到这一点?
这就是我尝试过的。但没有成功。
<script type="text/javascript">
$(document).ready(function() {
var index = $('#reg_req_data_table').dataTable({
"order": [[ 1, "desc" ]],
'aoColumnDefs': [{
'bSortable': false
}],
"bLengthChange": false,
"sDom": '<"top"pfl>rt<"bottom"i><"clear">'
});
});
</script>
最佳答案
这个答案将向您展示如何遵循 Rails 约定并在 ruby 类中处理排序,然后再以 json 形式返回到 DataTables。另外,如果您要处理超过数百条记录,强烈建议您使用服务器端处理,这比客户端处理要快得多(此示例将显示服务器端):
您的 user#index 操作应该是:
def index
respond_to do |format|
format.html
format.json { render json: UsersDatatable.new(view_context) }
end
end
您应该在应用程序文件夹中创建一个名为 datatables 的子文件夹,然后向其中添加以下 .rb 文件:
#app/datatables/users_datatable.rb Notice it's called users_datatable! Rails will infer the proper class lookup path because of this.
class UsersDatatable
delegate :params, :h, :link_to, to: :@view
def initialize(view)
@view = view
end
def as_json(options = {})
{
sEcho: params[:sEcho].to_i,
iTotalRecords: User.count,
iTotalDisplayRecords: users.total_entries,
aaData: data
}
end
private
def data
users.map do |user|
[
user.created_at.strftime("%d-%b-%y")
]
end
end
def users
@users ||= fetch_users
end
def fetch_users
users = User.all.order("created_at DESC")
users = users.page(page).per_page(per_page)
if params[:search].present? && params[:search]["value"].present?
users = users.where("email like :search", search: "#{params[:search]["value"]}%")
users
end
def page
params[:start].to_i/per_page + 1
end
def per_page
params[:length].to_i > 0 ? params[:length].to_i : 10
end
def sort_column
columns = %w[created_at ]
columns[params[:order]["0"]["column"].to_i]
end
def sort_direction
params[:order]["0"]["dir"] == "desc" ? "desc" : "asc"
end
end
现在您相应的用户 View index.html.erb
应该是:
<div class='table-responsive'>
<table id='reg_req_data_table' data-source="<%= users_path(params.merge!(format: :json).deep_symbolize_keys)%>">
<thead>
<tr>
<th>Created On:</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<script type="text/javascript">
$(document).ready(function() {
$('#reg_req_data_table').DataTable({
"serverSide": true,
"ajax": {url: '<%= users_path(params.merge!(format: :json).deep_symbolize_keys)%>', type: "POST"},
"processing": true
}),
});
</script>
请注意表体标签中没有任何内容。服务器端处理设置数据表通过 json 接受该信息,这是我们在 UsersDatatable 类中发送的内容。
关于javascript - 如何配置数据表,以便它根据创建的日期对记录进行排序(描述)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40083613/