Rails UJS - Выберите элемент, который щелкнул в файле js.erb?
Как выбрать выбранный элемент с помощью jQuery - используя $(this) и т. Д. - в ответе файла js.erb с сервера?
У меня есть таблица проектов, и я хотел бы иметь возможность вставить новый проект прямо под строкой, на которой я нажал кнопку "Добавить проект". Если возможно, я бы хотел использовать универсальный селектор jQuery и не полагаться на конкретные идентификаторы CSS.
Вот таблица моих проектов:
<table class="table">
<tr class="active">
<th style="width:31%">Project</th>
<th style="width:42%">Notes</th>
<th style="width:10%">Due</th>
<th style="width:8%">Priority</th>
<th style="width:3%"></th>
<th style="width:3%"></th>
<th style="width:3%"></th>
</tr>
<% @projects.each_with_index do |project, index| %>
<tr id="row-<%= index + 1 %>">
<td><%= project.title %></td>
<td><%= project.notes %></td>
<td><%= project.due_date %></td>
<td><%= project.priority %></td>
<td><a href="#">Edit</a></td>
<td><a href="#">Del</a></td>
<td><%= link_to "+", new_project_path(@project, :row => index + 1), :remote => true, :class => "add-project" %></td>
</tr>
<% end %>
</table>
Вот мое действие по созданию:
def create
@project = Project.new(params[:project])
@project.save
respond_with(@project)
end
Вот мой файл create.js.erb:
$(this).closest("tr").after("<%= j(render "new_project_row") %>");
И вот мой частичный new_project_row:
<tr>
<td><%= @project.title %></td>
<td><%= @project.notes %></td>
<td><%= @project.due_date %></td>
<td><%= @project.priority %></td>
<td><a href="#">Edit</a></td>
<td><a href="#">Del</a></td>
<td>#</td>
</tr>
Ошибки не выбрасываются. Новый проект добавляется в базу данных правильно, но новая строка не вставляется в таблицу проектов. Любая помощь с этим будет принята с благодарностью.
1 ответ
Поскольку вы уже проходите :row
в вашем действии create сохраните его в переменной экземпляра, чтобы он был доступен в вашем представлении. Тогда в вашем js.erb вы можете сделать
$("##(@row)").after("<%= j(render "new_project_row") %>");
Так как это на самом деле будет id
данного tr
Вы должны просто быть в состоянии позвонить сразу.