添加用于删除对象的ajax - Rails
Adding ajax for deleting an object - Rails
我目前有一个简单的form_for删除对象。现在它是一个静态页面,每次对象被删除时都会刷新。我们收到一个客户请求,希望索引页在不刷新页面的情况下删除对象。显然ajax可以解决这个问题,但我对javascript的经验非常有限。如果有人能给我指出正确的方向,我会非常感激。下面是我的代码。
形式这是按下delete键时弹出模态的表单。
<%= link_to 'Delete', delete_snitch_path(snitch), rel: 'modal:open',
data: { tooltip: "Delete" },
class: 'icon icon-delete delete', title: "Delete #{snitch.name}" %>
<%= form_for @snitch, html: { class: "form-actions", method: 'delete' } do |form| %>
<span class="button-text"><%= link_to 'NO WAY!', home_base_url_or_default(root_path), rel: "modal:close" %></span>
<input type="submit" class="button button--modal" value="Yes, delete it.">
<% end %>
h2控制器 def destroy
DestroySnitch.perform(snitch: @snitch)
respond_to do |format|
format.html do
redirect_to snitches_path, notice: "Snitch was successfully deleted."
end
format.json do
render json: @snitch.all
end
end
end
<<h2>视图/h2><table class="snitch-list">
<%= render partial: 'snitch', collection: @presenter.snitches %>
</table>
当前JS(不支持OBVI)
$('ajax').bind('ajax:success', function() {
$(this).closest('tr').fadeOut();
});
整个告密者部分
<tbody>
<tr class="<%= snitch.classes %>">
<td>
<%= link_to "<span class='icon led'></span><span>#{snitch.name}</span>".html_safe, snitch_path(snitch), class: "name"%>
</td>
<td class="interval"><span class="vspace"><%= snitch.interval %></span></td>
<td class="last-checked">
<span class="vspace">
<% if snitch.source.checked_in_healthy_at %>
<span data-tooltip="Checked in healthy at UTC(<%= snitch.source.checked_in_healthy_at.to_i %>) || LOCAL(<%= snitch.source.checked_in_healthy_at.to_i %>)">
Last seen <strong><%= snitch.checked_in_healthy_at(title: nil) %></strong>
</span>
<% else %>
<strong><%= snitch.checked_in_healthy_at %></strong>
<% end %>
</span>
</td>
<td class="snitch-controls" data-icons="<%= snitch.pauseable? ? "5" : "4" %>">
<%= render 'menu', snitch: snitch %>
<nav class="snitch-states" >
<% if snitch.pauseable? %>
<%= link_to 'Pause', pause_snitch_path(snitch), class: 'icon icon-pause pause',
data: { tooltip: "Pause" },
rel: "modal:open" %>
<% end %>
<%= link_to 'Delete', delete_snitch_path(snitch), rel: 'modal:open',
data: { tooltip: "Delete" },
class: 'icon icon-delete delete', title: "Delete #{snitch.name}" %>
</nav>
</td>
</tr>
</tbody>
def destroy
DestroySnitch.perform(snitch: @snitch)
respond_to do |format|
format.html do
redirect_to snitches_path, notice: "Snitch was successfully deleted."
end
format.json do
render json: @snitch.all
end
end
end
<table class="snitch-list">
<%= render partial: 'snitch', collection: @presenter.snitches %>
</table>
$('ajax').bind('ajax:success', function() {
$(this).closest('tr').fadeOut();
});
<tbody>
<tr class="<%= snitch.classes %>">
<td>
<%= link_to "<span class='icon led'></span><span>#{snitch.name}</span>".html_safe, snitch_path(snitch), class: "name"%>
</td>
<td class="interval"><span class="vspace"><%= snitch.interval %></span></td>
<td class="last-checked">
<span class="vspace">
<% if snitch.source.checked_in_healthy_at %>
<span data-tooltip="Checked in healthy at UTC(<%= snitch.source.checked_in_healthy_at.to_i %>) || LOCAL(<%= snitch.source.checked_in_healthy_at.to_i %>)">
Last seen <strong><%= snitch.checked_in_healthy_at(title: nil) %></strong>
</span>
<% else %>
<strong><%= snitch.checked_in_healthy_at %></strong>
<% end %>
</span>
</td>
<td class="snitch-controls" data-icons="<%= snitch.pauseable? ? "5" : "4" %>">
<%= render 'menu', snitch: snitch %>
<nav class="snitch-states" >
<% if snitch.pauseable? %>
<%= link_to 'Pause', pause_snitch_path(snitch), class: 'icon icon-pause pause',
data: { tooltip: "Pause" },
rel: "modal:open" %>
<% end %>
<%= link_to 'Delete', delete_snitch_path(snitch), rel: 'modal:open',
data: { tooltip: "Delete" },
class: 'icon icon-delete delete', title: "Delete #{snitch.name}" %>
</nav>
</td>
</tr>
</tbody>
我没有任何javascript的地方,我刚刚开始这个故事,但我已经感到困惑,而谷歌搜索。此外,是否有一个好的方法来测试ajax与Rspec和Capybara?
将一个类附加到按钮上(我的ajax在这里使用了"delete-snitch"),以确认模态中的删除。
为该按钮添加"data-snitch-id"属性。您将需要其中对象的id来删除正确的对象。
(这需要添加到按钮在模态,一个被点击。)
<button class="delete-snitch ...any other classes..." data-snitch-id="<%= snitch.id %>"> ... </button>
在你的javascript文件中,在
下面加上如下内容 $(document).on('click','.delete-snitch', function() {
var snitchID = $(this).attr('data-snitch-id');
$.ajax({
type: 'DELETE',
url: '/snitch/' + snitchID,
success: function(){
$('#tr-for-snitch-' + snitchID).fadeOut;
}
});
});
你必须确保data-snitch-id属性中有id才能正常工作。
为要删除的文件添加id。
<tr id="tr-for-snitch-<%=@snitch.id%>" class="<%= snitch.classes %>">
这里有一些步骤,因为我没有你的整个源代码,包括视图和所有的
- 创建一个带有特定类的html按钮。
- 在向删除API发出请求的按钮上添加一个监听器(
$('.button-class').click(sendDeleteRequest(e))
)。 - 当你的删除API响应成功200次时,删除条目。
- 要删除项目,使用jquery选择。ie。
$('.class-of-object).remove();
- 故障时,
window.alert("Oops, that didn't work")
或window.reload()
相关文章:
- Rails-JQueryUIAutcomplete和AJAX不工作,可以't连接到数据库
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- 通过rails中的Ajax在控制器B的每个视图中渲染控制器a的视图
- Ajax and Json with Rails
- Ajax调用ERror Cross Origin REquest:在rails中自动完成大学列表
- 使用Rails 3中的AJAX删除记录
- 使用AJAX在Rails中提交动态表单的最佳方式是什么
- Rails——处理多态关联上的Ajax destroy调用
- Rails jquery ajax调用未启动
- 如何在rails应用程序中测试AJAX加载的内容
- 在 Ajax Rails 表单提交后,在表单下发布额外的 Javascript 代码 ( ..等)
- AJAX+Rails 单击处理程序不绑定
- 呈现Ajax/Rails的问题
- 使用Ajax Rails 4保存后的动作
- AJAX + Rails的最新技术是什么?
- 添加用于删除对象的ajax - Rails
- 按钮不't在Ajax-Rails教程3中的更新;12.2.5
- $.get在AJAX Rails 4中没有执行
- SetInterval Form 使用 AJAX Rails 提交
- Zurb基础模态与ajax (rails)