Rails Datatables AJAX - неверный ответ JSON

Я пытаюсь построить таблицу, используя jquery datatables и ajax. К сожалению, я получаю ошибку "неверный ответ JSON".

Я попробовал диагностику со страницы datatables.net, но это мне тоже не помогло. Он не показывает никаких данных, просто HTML-код из таблицы. Я думаю, что я делаю что-то не так, так как у меня нет опыта работы с инструментами развития.

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

Вид (Haml):

%table{:id => 'change_log', :class => 'display', "data-source" => qip_changes_path(format: 'json')}
  %thead
    %tr
      %th User
      %th Tenant
      %th Action
      %th Type
      %th Object
      %th Status
      %th Response

контроллер:

class QipChangesController < ApplicationController


    def index

      repond_to do |format|
        format.html
        format.json {
          render json: QipChangesDatatable.new(view_context)
        }
      end

    end

end

Класс построения таблицы данных:

class QipChangesDatatable < ApplicationDatatable
delegate :params, :h, :link_to, :number_to_currency, to: :@view

  include AjaxDatatablesRails::Extensions::WillPaginate

  def initialize(view)
    @view = view
  end


  def as_json(options = {})
    { 
      sEcho: params[:sEcho].to_i,
      iTotalRecords: QipChange.count,
      iTotalDisplayRecords: qip_changes.total_entries,
      aaData: data
    }
  end

  def fetch_qip_changes
    qip_changes = QipChange.order("#{sort_column} #{sort_direction}")
    qip_changes = qip_changes.page(page).per_page(per_page)
    if params[:sSearch].present?
      qip_changes = qip_changes.where("name like :search or category like :search", search: "%#{params[:sSearch]}%")
    end
    qip_changes
  end

  def view_columns
    @view_columns ||= {
      user:         { source: "QipChange.name" },
      tenant:         { source: "QipChange.tenant" },
      action:         { source: "QipChange.action" },
      type:         { source: "QipChange.object_type" },
      object:         { source: "QipChange.object_data" },
      status:         { source: "QipChange.implementation_status" },
      response:        { source: "QipChange.server_response" }
    }
  end

  def data
    qip_changes.map do |qip_change|
      { 
        user: qip_changes.name,
        tenant: qip_changes.tenant,
        action: qip_changes.action,
        type: qip_changes.object_type,
        object: qip_changes.object_data,
        status: qip_changes.implementation_status,
        response: qip_changes.server_response,
        DT_RowId:   qip_changes.id, # This will automagically set the id attribute on the corresponding <tr> in the datatable
      }
    end
  end
end

Маршруты:

Rails.application.routes.draw do

  root :to => 'imports#index'
  devise_for :users
  post 'imports/index' => 'imports#index'
  resources :imports
  resources :qip_changes
  end

Такое ощущение, что мне не хватает тянуть данные сначала для "view_columns".

Я благодарен за все намеки.

0 ответов

Другие вопросы по тегам