2016-05-18 8 views
2

Я пытаюсь использовать камень ajax-datatables-rails, найденный here, не повезло. Моя таблица отображается и имеет правильные данные (для первой страницы), но когда я пытаюсь выполнить поиск, сортировку или изменение страниц, данные таблицы не обновляются.Rails 4 + Datatables: Ajax-datatables-rails gem не обновляет таблицу

Я пропустил что-то простое?

Посмотреть

<table id="users-table" data-source="<%= users_path(format: :json) %>"> 
    <thead> 
    <tr> 
     <th>ID</th> 
     <th>Name</th> 
     <th>Email</th> 
     <th>Admin?</th> 
     <th>Employee?</th> 
     <th>Client?</th> 
    </tr> 
    </thead> 
    <tbody> 
    </tbody> 
</table> 

Контроллер

def index 
    respond_to do |format| 
     format.html 
    format.json { render json: UserDatatable.new(view_context) } 
    end 
end 

Datatable

class UserDatatable < AjaxDatatablesRails::Base 
    # uncomment the appropriate paginator module, 
    # depending on gems available in your project. 
    # include AjaxDatatablesRails::Extensions::Kaminari 
    include AjaxDatatablesRails::Extensions::WillPaginate 
    # include AjaxDatatablesRails::Extensions::SimplePaginator 

    def sortable_columns 
    # list columns inside the Array in string dot notation. 
    # Example: 'users.email' 
     @sortable_columns ||= [ 
      'users.id', 
      'users.name', 
      'users.email', 
      'users.admin', 
      'users.employee', 
      'users.is_client' 
     ] 
    end 

    def searchable_columns 
    # list columns inside the Array in string dot notation. 
    # Example: 'users.email' 
     @searchable_columns ||= [ 
      'users.id', 
      'users.name', 
      'users.email', 
      'users.admin', 
      'users.employee', 
      'users.is_client' 
     ] 
    end 

    private 

    def data 
    records.map do |record| 
     [ 
     # comma separated list of the values for each cell of a table row 
     # example: record.attribute, 
       record.id, 
       record.name, 
       record.email, 
       record.admin, 
       record.employee, 
       record.is_client 
     ] 
    end 
    end 

    def get_raw_records 
    # insert query here 
     User.all 
    end 

    # ==== Insert 'presenter'-like methods below if necessary 
end 

JS

$('#users-table').dataTable({ 
    "processing": true, 
    "serverSide": true, 
    "ajax": $('#users-table').data('source') 
    "pagingType": "full_numbers" 
    // optional, if you want full pagination controls. 
    // Check dataTables documentation to learn more about 
    // available options. 
}); 
+0

Это ваш '$ ('# users-table'). DataTable()' вызов в обратном вызове DOMReady? – Uzbekjon

+0

Да, и его с кучей других функций, называемых успешно. Диаграмма загружается, она просто не обновляется, и запросы ajax кажутся одинаковыми. –

ответ

0

У вас есть сервер обработки боковой поддержкой, что означает, что DataTables будет сделать запрос Ajax, когда вы поиск или сортировку и передать набор параметров через URL вы указали в настройках АЯКС.

Фактическая обработка должна выполняться на сервере, и ответ должен соответствовать протоколу, указанному в данных. Вы можете проконсультироваться с документами here

+0

Я понимаю это, но этот драгоценный камень должен помочь сделать эти ajax-запросы, насколько я могу судить ... –

+0

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

0

Попробуйте использовать уникальный user.id вместо 'users.id' в вашем классе UserDatatable для всех ваших столбцов. Я должен был сделать это для моего, который не согласился бы с типичным множественным соглашением именования моей таблицы, как показано в документации для этого драгоценного камня.

+0

Вы можете проверить, не является ли эта проблема вызовом 'users_path {format:: json}'. Например. если users_path является '/ users', тогда вызов' localhost: 3000/users.json' должен показывать вам форматированный json-файл. Если это показывает, я сомневаюсь, что это проблема «UserDatatable». – jQwierdy

Смежные вопросы