Передача переменной в контроллер через вызов Ajax - PullRequest
0 голосов
/ 31 октября 2019
Rail 5.2
datatables

В моих views / books / index.html.slim я загружаю частичку из другого MVC следующим образом:

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

В моих представлениях / авторы / _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 / авторы_controllers.rb у меня есть следующее:

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

Когда я запускаю его, таблица авторов отображается правильно. Проблема в том, что имя автора жестко закодировано в действии контроллера. Мой частичный _index получает имя автора, но как мне передать его контролеру авторов, как часть выполняемого мной вызова Ajax? Новое в Ajax / Javascript.

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Как насчет

#_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
1 голос
/ 31 октября 2019

У меня не установлены необходимые инструменты для проверки этого, но в документации 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...