這個答案將告訴你如何遵循Rails的約定和處理祭出背出爲JSON到數據表之前的紅寶石類排序。另外,如果您處理的記錄超過數百條,強烈建議您使用服務器端處理,而不是客戶端處理(此示例將顯示服務器端),處理速度要快得多:
您的用戶#索引動作應該是:
def index
respond_to do |format|
format.html
format.json { render json: UsersDatatable.new(view_context) }
end
end
你應該在你的應用程序文件夾中創建子文件夾命名的數據表,然後添加此.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
現在您的相應用戶查看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類中發送的信息。
我會使用Bates的railscast,並按照他的方法創建一個單獨的類來處理邏輯。它遵循Rails約定,並允許您處理大部分ruby操作,如排序。 – bkunzi01
如果你想要一個完整的寫作,我會告訴你如何做到這一點「鐵軌」的方式。只要讓我知道,如果你還沒有解決它。 – bkunzi01
沒有解決。請用鐵軌方式幫助我 – John