Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如果名称包含点,如何在dataTables列初始化中获取JSON对象值?_Jquery_Ruby On Rails_Json_Datatables - Fatal编程技术网

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

Jquery 如果名称包含点,如何在dataTables列初始化中获取JSON对象值?,jquery,ruby-on-rails,json,datatables,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',

我使用的是数据表服务器端,但无法获取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\u tutors.name
end
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生成得很好,但DataTable给了我以下错误:

DataTables警告:表id=index-table-company\u导师-已请求 第0行第0列的未知参数“company_tutors.name”。更多 有关此错误的信息,请参阅

我想我必须将数据保存在变量中,然后执行以下操作:

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属性名称中有点,则必须使用
\\
来转义这些点:

columns: [
  { data: 'company_tutors\\.name' },
  { data: 'company_tutors\\.surname' },
  { data: 'company_tutors\\.phone' },
  { data: 'company\\.name'}
]
否则dataTables会认为您引用的是嵌套对象,即
{company_tutors:{name:'xyz,…}}

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