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".
Я благодарен за все намеки.