У меня работает пагинация и поиск. Однако я не могу настроить переключатель столбца таблицы данных для правильной организации.
Я использую Will_paginate 2.3, Rails 2.3 и новейшую таблицу данных для их CDN, а не для их драгоценных камней.
Мой код выглядит следующим образом (я не создавал новую модель с данными в соответствии с RailsCast):
Контроллер:
def paginate
@users = current_program.users.order("#{sort_column} #{sort_direction}")
if params[:sSearch].present?
@users = @users.where("username LIKE :search OR first_name LIKE :search OR last_name LIKE :search", :search => "%#{params[:sSearch]}%")
end
@users = @users.paginate(:page => page, :per_page => per_page)
@users_data = @users.map { |user| ["<a href='/admin/users/show/#{user.id}'>#{user.first_name}</a>", user.last_name, user.username]}
respond_to do |format|
format.html
format.json do
render :json => {
"sEcho" => params[:sEcho].to_i,
"iTotalRecords" => @users.count,
"iTotalDisplayRecords" => @users.total_entries,
"aaData" => @users_data.as_json
}
end
end
end
private
def sort_column
columns = %w[first_name last_name username]
columns[params[:iSortCol_0].to_i]
end
def sort_direction
params[:sSortDir_0] == "DESC" ? "DESC" : "ASC"
end
Вид:
<table class="table" id="pagtable" data-source="<%= url_for(:controller => :account, :action => :paginate, :format => :json) %>">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<script type="text/javascript">
$(document).ready(function() {
$("#pagtable").dataTable({
sPaginationType: "full_numbers",
bProcessing: true,
bServerSide: true,
sAjaxSource: $("#pagtable").data("source")
});
});
</script>