Я понимаю, что здесь есть десятки подобных вопросов по этой теме, я просмотрел многие из них и попытался продублировать решения, но у меня ничего не получилось.
У меня есть список задач, отображаемый виндексное представление как частичное, когда пользователь добавляет задачу, я хотел бы, чтобы список отображал новейшую задачу (а также все остальные, которые уже были там).
Вот контроллер создания:
def create
@task = current_user.tasks.build(task_params)
if @task.save
flash[:success] = "Task added"
respond_to do |format|
format.js
end
else
flash[:error] = "Task not added"
render 'new'
end
_new частичное:
<%= form_for(@task, method: :post, remote: true) do |f| %>
<%= f.label :comments %>
<%= f.text_field :comments, id: "task-comments" %>
<%= f.submit "Insert" %>
<% end %>
Index.html.erb
<div id="new-task-form">
<%= render 'new' %>
</div>
<div id="current-tasks">
<%= render partial: 'show_list', locals: {tasks: @tasks} %>
</div>
create.js.erb
console.log("create.js.erb called");
document.getElementById("task-comments").value = "";
document.getElementById("current-tasks").html('<%= j(render partial: "show_list") %>');
Я смог получить консоль для записи сообщения и даже смог очистить поле ввода, но частичное не рендерится, я пробовал это несколькими различными способами икажется, что скрипт всегда останавливается, когда достигает строки escape-javascript.
Нет ошибок JS, как указано выше, консоль записывает сообщение при нажатии кнопки «Отправить».Есть предупреждение [Violation] Forced reflow while executing JavaScript took 114ms
, но я не думаю, что это имеет отношение к этой проблеме.
Вот часть, которую я пытаюсь отобразить _show_list.html.erb
<% unless @tasks.nil? %>
<ul>
<% tasks.each do |tsk| %>
<li><%= tsk.comments %></li>
<% end %>
</ul>
<% end %>