通过Ajax调用将变量传递给控制器

时间:2019-10-31 12:31:36

标签: ruby-on-rails ajax datatables jquery-datatables-rails

Rail 5.2
datatables

在我的views / books / index.html.slim中,我正在从另一个MVC加载部分内容,如下所示:

 = render  partial: 'authors/index', :locals => {:author => @book.author}

在我的views / authors / _index.html中,我具有以下内容:

.....    
table.table-striped.table-bordered.table-hover.nowrap#AuthorsIndex.display
.....

javascript:
  $('#AuthorsIndex').DataTable({
    ajax: '/authors',
    columns: [
      {title: 'Publish Date', data: 'created_at'},
      {title: 'Publisher', data: 'publisher'},
      {title: 'Title', data: 'title'},
    ]
  });

而且,在我的controllers / authors_controllers.rb中,我具有以下内容:

def index
  @authors = Author.where(author: "John Doe")
  render json: { data: @authors }
end

当我运行它时,authors表正确显示。问题在于作者名称在控制器操作中是硬编码的。我的_index部分正在接收作者名称,但是作为我正在进行的Ajax调用的一部分,如何将其发送到作者控制器? Ajax / Java脚本的新手。

2 个答案:

答案 0 :(得分:1)

我没有安装必要的工具来对此进行测试,但是jQuery DataTable文档说您可以通过ajax.data选项提供自定义数据。

  

通过ajax.data选项,可以将其他数据添加到   请求,或在需要时修改要提交的数据对象。

     

...

     

作为对象,ajax.data选项用于扩展数据   DataTables内部构造以提交给服务器的对象。   这提供了一种添加其他静态参数的简便方法   要发送到服务器的数据。用于动态计算   值,请使用ajax.data作为函数(请参见下文)。

该文档还提供了示例方案,并进一步详细介绍了可以提供的内容。

$('#AuthorsIndex').DataTable({
  ajax: {
    url: '/authors',
    data: {author: '<%= j author %>'}
  },
  columns: [
    {title: 'Publish Date', data: 'created_at'},
    {title: 'Publisher',    data: 'publisher'},
    {title: 'Title',        data: 'title'}
  ]
});

然后在控制器中:

def index
  @authors = Author.where(author: params[:author])
  render json: { data: @authors }
end

答案 1 :(得分:1)

怎么样

#_index.html
javascript:
  $('#AuthorsIndex').DataTable({
    ajax: '/authors?author=<%= author %>',
    columns: [
      {title: 'Publish Date', data: 'created_at'},
      {title: 'Publisher', data: 'publisher'},
      {title: 'Title', data: 'title'},
    ]
  });

#authors_controllers.rb
def index
  @authors = Author.where(author: params[:author])
  render json: { data: @authors }
end