#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 не вызывает другой контроллер.