2016-11-07 79 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時,此問題消失。