2016-11-07 76 views
0

我想用ajax-datatables-rails gem实现rails服务器端数据表。当我想查看表格时,出现未定义的方法搜索错误。这是我的代码ajax-datatables-rails undefined方法搜索

class ContractorDatatable < AjaxDatatablesRails::Base 

    def view_columns 
    # Declare strings in this format: ModelName.column_name 
    # or in aliased_join_table.column_name format 
    @view_columns ||= { 
     id: { source: "Contractor.id", cond: :eq }, 
     name: { source: "Contractor.name" }, 
     city: { source: "Contractor.city" }, 
     ico: { source: "Contractor.ico" }, 
     country: { source: "Contractor.country" } 
    } 
    end 
    def data 
    records.map do |contractor| 
     { 
     # example: 
     id: contractor.id, 
     name: contractor.name, 
     city: contractor.city, 
     ico: contractor.ico, 
     country: contractor.country 
     } 
    end 
    end 
    private 
def contractors 
    @contractors ||= fetch_records 
end 
def get_raw_records 
    Contractor.all 
end 
def get_raw_record_count 
    search_records(get_raw_records).count 
end 

end 

在我的控制,我把它变成指数

class ContractorsController < ApplicationController 
    before_action :authenticate_user!, :except => [:showcontractor,:listcontractors,:index] 
    before_action :set_contractor, only: [:show, :edit, :update, :destroy] 
    respond_to :html, :json 
    # GET /contractors 
    # GET /contractors.json 
    def index 
    @contractors = Contractor.all 
    respond_to do |format| 
     format.html 
     format.json do 
     render json: ::ContractorDatatable.new(view_context) 
     end 
    end 
    end 

和JavaScript是简单的呼叫从阿贾克斯此JSON。但是在控制台中,我发现获取JSON请求会返回0条记录和未定义的方法搜索错误。

NoMethodError(未定义的方法'搜索”的 ‘Contractor.name’:字符串):

我有一个数据表和PHP服务器端的经验,但我有点失去了它是如何工作的轨道。 THX

编辑: JavaScript代码

var tableconready = function() { 
    $('#admindodavatelia').DataTable({ 
     'order': [0, 'asc'], 
     'serverSide': true, 
     'ajax' : '/contractors.json', 
     'language': { 
     'url': '/datatables_slovak.json' 
     } 
    }); 
    }; 
    $(".contractors.index").ready(tableconready); 
    $(".contractors.index").on('turbolinks:load', tableconready); 

EDIT2: 我打扫ContractorDatatable代码把它像教程,但我得到

(1.4ms之)SELECT COUNT()FROM“contractors”(2.0ms)SELECT COUNT()FROM(SELECT“contractors”。* FROM“contractors”)AS foo 已完成500内部服务器E RROR在8ms的(ActiveRecord的:3.5ms)

NoMethodError(未定义的方法[]' for nil:NilClass):
app/datatables/contractor_datatable.rb:20:in
数据 '
应用程序/控制器/ contractors_controller.rb:13:block (2 levels) in index' app/controllers/contractors_controller.rb:10:in索引'

+0

和您的JavaScript代码?你是谁请求数据表? – inye

+0

添加了javascript代码。您是指您请求的是谁? –

+0

谁生成你请求数据表的URL – inye

回答

2

尝试使用此

var tableconready = function() { 
    $('#admindodavatelia').DataTable({ 
     'order': [0, 'asc'], 
     'serverSide': true, 
     'ajax' : '/contractors.json', 
     'language': { 
     'url': '/datatables_slovak.json' 
     }, 
     columns: [ 
     {data: 'id' }, 
     {data: 'name' }, 
     {data: 'city' }, 
     {data: 'ico' }, 
     {data: 'country' }, 
     ] 

    }); 
    }; 
    $(".contractors.index").ready(tableconready); 
    $(".contractors.index").on('turbolinks:load', tableconready); 

您错过了列的定义

而在AjaxDatatable中,get_raw_record_countcontractors你不需要它的功能。

+0

谢谢!这工作 –

0

嗯,有2种类型的结合datatable.net和datatable.rb列:

  1. 默认datatable.net通列的索引。

    class CityDatatable < AjaxDatatablesRails::Base 
    
        def view_columns 
    
        @view_columns ||= { 
         '0' => { source: "City.id", cond: :eq }, 
         '1' => { source: "City.name" }, 
         ... 
        } 
    
        end 
    end 
    
    
    $('#city').DataTable({ 
        'serverSide': true, 
        'ajax' : '/cities.json' 
    }); 
    
  2. 按列名绑定。

    class CityDatatable < AjaxDatatablesRails::Base 
    
        def view_columns 
        @view_columns ||= { 
         **id**: { source: "City.id", cond: :eq }, 
         **name**: { source: "City.name" }, 
         ... 
        } 
        end 
    end 
    
    
    $('#city').DataTable({ 
        'serverSide': true, 
        'ajax' : '/contractors.json' 
    }, 
    columns: [ 
        {data: '**id**' }, 
        {data: '**name**' }, 
        ... 
    ] 
    }); 
    
0

我只是检查,这是ajax-datatables-rails宝石版本问题。当我使用0.4.0版本时,我遇到了同样的问题,但在切换回0.3.1时,此问题消失。