Rails-使用Ajax删除li元素
Rails - delete li element with Ajax
我有一个用户列表,我想在单击同一行上的"删除"链接时删除元素。
视图:
# users/index.html.erb
<ul class="users">
<%= render @users %>
</ul>
# users/_user.html.erb
<li id="user-<%= user.id %>">
<%= link_to user.email, user %>
<% if current_user.admin? %>
<%= link_to "delete", user, remote: true, method: :delete, data: { confirm: "You sure?" } %>
<% end %>
</li>
用户控制器:
# users_controller.rb
def destroy
User.find(params[:id]).destroy
flash[:success] = "User deleted"
respond_to do |format|
format.html { redirect_to users_url }
format.js
end
end
删除列表元素的javascript是:
# users/destroy.js.erb
$("li#<%= user.id %>").remove();
单击时不会发生任何事情,但在页面刷新时,资源被正确销毁。检查服务器的日志我看到以下错误:
在40ms内完成500内部服务器错误(ActiveRecord:5.0ms)
ActionView::Template::错误(未定义的局部变量或方法
user' for #<#<Class:0x0000000851d300>:0x00000008e8e7e0>): 1: $("li#<%= user.id %>").remove(); app/views/users/destroy.js.erb:1:in
_app_views_users_destroy_js_erb___2066095411338793994_74738360'
app/controllers/users_controller.rb:46:在"销毁"中
你能帮我理解错误在哪里,为什么"用户"没有定义吗?感谢
编辑
我知道有很多问答;a类似于这个问题的,我实际上是根据这些问题构建代码的。尽管如此,我还是被困了,我需要支持。请不要将问题标记为重复。
destroy.js.erb模板没有获取用户变量,因为它是未定义的。尝试:
def destroy
@user = User.find(params[:id])
@user.destroy
respond_to do |format|
format.html { redirect_to users_url }
format.js
end
end
和
$("li#<%= @user.id %>").remove();
这样做的原因是rails通过设置带有@prefix的变量将数据从控制器传递到视图。因此,您将@user设置为从数据库中获取的模型的一个实例,然后对该模型调用.dedestroy,它被删除了,然后您呈现了destroy.js模板,该模板中也有@user,您删除了与"li#233"选择器匹配的列表项,或任何id整数为的列表项
您没有定义user
变量。
您可以将@user_id
保存在一个变量中,以便在js.erb
中访问。比如:
def destroy
@user_id = params[:id]
...
end
然后:
$("li#<%= @user_id %>").remove();
- 完全可链接的li元素
- 使用li元素的html内容更改该元素的背景
- 需要在量角器中找到使用ng中继器的li元素的数量
- 根据输入值创建li元素
- 要更改变量的高度li元素
- 为li元素添加标题
- 在不使用sort()的情况下获取HTML LI元素的副本
- 将内容从 JSON 数组附加到 li 元素
- 获取 LI 元素的偏移宽度(或等效项)
- addClass 到当前 li 元素并删除类
- 使用纯JS点击即可从li元素中获取文本和id
- Rails-使用Ajax删除li元素
- 对具有相同类级别的不同li元素进行排序
- 显示/隐藏具有不同类的li元素
- 从ul中删除li元素
- 从OL中移除LI元素
- 删除不起作用的li元素
- 从javascript生成的li a元素触发onclick
- 如何使用json对象作为li元素的id属性或使用javascript锚定标记id
- 添加和删除jquery-li元素