如何将数组从js传递到控制器

时间:2019-02-28 02:15:44

标签: javascript ruby-on-rails ruby backbone.js

我的JavaScript文件app/assets/javascript/pages/books_page.js中有一个数组:

var booksPage = Backbone.Model.extend({
  defaults: {
    authors: []
  }
  ...

如何将其作为参数传递给我的控制器。我的控制器的路径是app/controllers/books_controller.rb吗?

我认为我可能需要ajax请求,并尝试了以下操作,但没有用:

$.ajax({
        type: "post",
        url: "/books_controller",
        data: { list_authors: this.get('authors') },
      });

具体来说,我不确定该URL是什么。非常感谢您在这里的帮助。谢谢。

3 个答案:

答案 0 :(得分:1)

Backbone(和jQuery)应该为您完成所有繁重的工作。在模型中设置urlRoot

var booksPage = Backbone.Model.extend({
  urlRoot: '/books',
  ...
});

,然后在实例上调用save,以将数据发送到服务器:

// Get or create `books` as a `booksPage` instance as usual...
// Then make some changes to `books` using `books.set(...)`...
books.save();

答案 1 :(得分:0)

type: 'POST', 
url: `/books/${this.id}`, // or '/books/' + this.id,
data: {
  _method: 'put'
}

这会将您路由到BooksController#update。您还需要将_method条目合并到数据对象中。

“注意:因为跨浏览器不支持使用GET和POST以外的HTTP方法提交表单,所以所有其他HTTP方法实际上都通过POST并以_method参数中指定的预期方法发送。Rails自动检测并补偿这个。” -Working with JavaScript in Rails

答案 2 :(得分:0)

您可以使用JSON.stringify,并从控制器JSON.parse(params)进行解析。

$.ajax({
      type: "post",
      url: "/books_controller",
      data: { list_authors: JSON.stringify(this.get('authors')) }
});