2017-06-16 9 views
1

データテーブルのサーバー側を使用していますが、JSONオブジェクトを取得できません。 テーブルはこのように初期化されます:dataTables列の初期化にJSONオブジェクトの値を取得する方法。

var table = $('#index-table-company_tutors').DataTable({ 
      buttons: buttons, 
      serverSide: true, 
      order: [[0, 'asc']], 
      pageLength: 10, 
      ajax: 'company_tutors.json', 
      columns: [ 
      { data: 'company_tutors.name' }, 
      { data: 'company_tutors.surname' }, 
      { data: 'company_tutors.phone' }, 
      { data: 'company.name'} 
      ]}); 

インデックスコントローラで、私は列の名前を取得し、私はそれをデータベースに選択するので、私は、Railsのを使用していますが、この場合、私は2つに参加する必要があります属性の名前が同じテーブル。

{"data":[{"company_tutors.name":"Name_test","company_tutors.surname":"Surname_test","company_tutors.phone":"335-7744391","company.name":"Company name","id":18}]} 

JSONはよく生成ですが、DataTableのは私に、このエラーを与える:

DataTables warning: table id=index-table-company_tutors - Requested unknown parameter 'company_tutors.name' for row 0, column 0. For more information about this error, please see http://datatables.net/tn/4

このような理由から、私はこれは、生成されたJSONの一例である company_tutors.nameエンド company.name

format.json do 
     # search[value]: 

     # default 10 massimo 50 
     limit = [(params[:length] || '10').to_i, 50].min 
     # default 0 
     offset = params[:start].to_i 
     # always include :id column 
     columns = (params[:columns] 
     .reject { |_, value| value[:data] == '' } # workaround exclude empty column (last one) 
     .map { |_, value| value[:data].to_sym } << :id).uniq 
     # 
     order = (params[:order].map do |_, spec| 
      # default :id 
      column = spec[:column] ? columns[spec[:column].to_i] : :id 
      # default :asc 
      dir = spec[:dir] == 'desc' ? :desc : :asc 
      [column, dir].join(' ') 
     end) 
     page = if params[:search][:value].blank? 
       @company_tutors.joins(:farm) 
           .limit(limit).offset(offset) 
           .order(order) 
       else 
       @company_tutors.joins(:farm) 
           .search(params[:search][:value]) 
           .limit(limit).offset(offset) 
           .order(order) 
       end 
     @data = page.pluck(*columns).map { |x| Hash[columns.zip(x)] } 
     end 

を使用する必要があります

私は変数にデータを保存しなければならないと思います。

var table = $('#index-table-company_tutors').DataTable({ 
       buttons: buttons, 
       serverSide: true, 
       order: [[0, 'asc']], 
       pageLength: 10, 
       ajax: 'company_tutors.json', 
       columns: [ 
       { data: mydata['company_tutors.name'] }, 
       { data: mydata['company_tutors.surname'] }, 
       { data: mydata['company_tutors.phone'] }, 
       { data: mydata['company.name']} 
       ]}); 

しかし、私はそれをどうするか考えていません。あなたはJSONのプロパティ名にドットがある場合

答えて

1

、あなたはドットをエスケープする\\を使用する必要があります。

columns: [ 
    { data: 'company_tutors\\.name' }, 
    { data: 'company_tutors\\.surname' }, 
    { data: 'company_tutors\\.phone' }, 
    { data: 'company\\.name'} 
] 

そうでない場合のDataTableはすなわち、ネストされたオブジェクトに参照のうえされていると信じています{ company_tutors: { name: 'xyz, ... }}

関連する問題