如果其名称包含点,则如何在dataTables列初始化中获取JSON对象值?

时间:2017-06-16 21:32:31

标签: jquery ruby-on-rails 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,所以在索引控制器中我得到列名,然后我在数据库中选择它,但在这种情况下我需要连接两个属性具有相同名称的表。出于这个原因,我需要使用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

这是生成的JSON的一个示例:

{"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警告:table id = index-table-company_tutors - 请求   未知参数&#39; company_tutors.name&#39;对于第0行,第0列。更多   有关此错误的信息,请参阅http://datatables.net/tn/4

我想我必须将数据保存在变量中,而不是像以下那样:

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']}
              ]});

但我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

如果您的JSON属性名称中包含点,则必须使用\\来避开点:

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

否则dataTables会相信您正在引用嵌套对象,即{ company_tutors: { name: 'xyz, ... }}