Как передать массив из JS в контроллер - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть массив в моем файле 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 голосов
/ 28 февраля 2019

Вы можете использовать JSON.stringify и проанализировать его из контроллера JSON.parse(params).

$.ajax({
      type: "post",
      url: "/books_controller",
      data: { list_authors: JSON.stringify(this.get('authors')) }
});
0 голосов
/ 28 февраля 2019

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();
0 голосов
/ 28 февраля 2019
type: 'POST', 
url: `/books/${this.id}`, // or '/books/' + this.id,
data: {
  _method: 'put'
}

Это приведет вас к BooksController#update.Вам также необходимо объединить запись _method с вашим объектом данных.

"ПРИМЕЧАНИЕ. Поскольку отправка форм с помощью методов HTTP, отличных от GET и POST, не поддерживается в разных браузерах, все остальные методы HTTP фактически отправляются.over POST с помощью метода, указанного в параметре _method. Rails автоматически обнаруживает и компенсирует это. "- Работа с JavaScript в Rails

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...