Попытка заставить сортировку столбцов работать с Will_paginate и DataTables с Rails 2.3

У меня работает пагинация и поиск. Однако я не могу настроить переключатель столбца таблицы данных для правильной организации.

Я использую 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>

person Stephen C    schedule 24.07.2015    source источник


Ответы (2)


можешь попробовать

http://railscasts.com/episodes/228-sortable-table-columns

@users = current_program.users.order(sort_column + " " + sort_direction).paginate(:page => page, :per_page => per_page)
person Rajarshi Das    schedule 24.07.2015
comment
Этот у меня не работал, на самом деле функция поиска сломалась с этим запросом. (после того, как я изменил его на синтаксис Rails 2.3) - person Stephen C; 24.07.2015

person    schedule
comment
Спасибо илан за ответ. Я пробовал это ранее, однако получил неопределенный метод `order' для #‹WillPaginate::Collection:0xb446bdc4›. Я не уверен, должен ли я сам определять порядок или он встроен в гем willpaginate. - person Stephen C; 24.07.2015