Rails Ajax Javascript частичный рендеринг с коллекцией ничего не показывает

#javascript #ajax #ruby-on-rails-4 #renderpartial

#javascript #аякс #ruby-on-rails-4 #визуализирующая часть

Вопрос:

В моем файле index.html.erb у меня есть:

 <table>
  <thead>
    <tr>
      <th>Title</th>
      <th>Note</th>
      <th colspan="2"></th>
    </tr>
  </thead>

  <tbody id="avail-courses">
    <%= render partial: 'avail_course', collection: @courses %>
  </tbody>
</table>
 

Которые в основном отображают частичный _avail_course.html.erb.

Я пытаюсь выполнить этот рендеринг с помощью ajax-вызова, поэтому я сделал свой javascript-файл enroll.js.erb как:

 $('#avail-courses').html("<%= escape_javascript render partial: 'avail_course', collection: @courses %>");
 

Вызов ajax успешно выполнен, но рендеринг ничего не возвращает, что делает мою таблицу с id #available-courses пустой.

Я что-то здесь упускаю? Я подозреваю, что в файле js я не могу передать коллекцию напрямую.

Для полноты картины мой частичный файл _avail_course.html.erb:

 <tr>
  <td><%= avail_course.title %></td>
  <td><%= avail_course.note %></td>
  <td><%= link_to 'Info', 'course_list/info/'   avail_course.id.to_s %></td>
  <td><%= button_to 'Enroll', 'course_list/enroll/'   avail_course.id.to_s, method: :put, remote: true %></td>
</tr>
 

Любой вклад приветствуется.

Комментарии:

1. если я не ошибаюсь, то вы пропускаете написание _avail_courses.html.erb , но вы визуализируете avail_course .

2. Это была ошибка. Но мои имена файлов в моем коде верны. Спасибо, что обратили на это внимание.

Ответ №1:

Пожалуйста, проверьте свое частичное имя <%= render partial: 'avail_course', collection: @courses %> , но ваше выше, что вы написали Which basically render a partial _avail_courses.html.erb. . Так что проверьте еще раз свои варианты написания.

Комментарии:

1. Это была опечатка, когда я набирал этот вопрос. Теперь все исправлено.

Ответ №2:

Я выяснил, в чем проблема. Это было потому, что @courses не был определен в контроллере. В нормальном format.html ответ, redirect_to заботится о @courses , но я забыл, что format.js не вызывает другой контроллер.