Javascript RoR:destroy.js.erb未与destroy操作一起运行
我的问题是,我希望在调用我的滑动控制器的销毁操作(它确实起作用)时,它会调用文件app/views/swipes/destroy.js.erb中的javascript。其想法是,在调用此文件时,它将刷新我的my deck div并提供一个更新的网页。不幸的是,虽然我的销毁操作正在工作,但它似乎没有正确调用js,我必须刷新网页以查看该项目已被删除 这里是相关的文件,让我知道如果更多的信息可能是有用的 app/controllers/swipes\u controller.rbJavascript RoR:destroy.js.erb未与destroy操作一起运行,javascript,ruby-on-rails,Javascript,Ruby On Rails,我的问题是,我希望在调用我的滑动控制器的销毁操作(它确实起作用)时,它会调用文件app/views/swipes/destroy.js.erb中的javascript。其想法是,在调用此文件时,它将刷新我的my deck div并提供一个更新的网页。不幸的是,虽然我的销毁操作正在工作,但它似乎没有正确调用js,我必须刷新网页以查看该项目已被删除 这里是相关的文件,让我知道如果更多的信息可能是有用的 app/controllers/swipes\u controller.rb class Swip
class SwipesController < ApplicationController
def new
end
app/views/my_deck/show.html.erb
<p> Welcome to my deck! </p>
<p> When this is working your right swiped events should appear beautifully below! </p>
<div class="my-deck">
</div>
<div class="well">
<div class="row">
<div class="col-xs-8">
<h4><%= event_id %></h4>
</div>
<div class="col-xs-4">
<div class="row">
<div class="col-xs-4">
</div>
<div class="col-xs-8 text-right">
<div class="btn-group">
<%= link_to "Delete", myCard, { data: { confirm: "Are you sure you wish to delete the product '#{myCard.event_id}' from your cart?"}, method: :delete, remote: true, class: "btn btn-danger" } %>
</div>
</div>
</div>
<% end %>
</div>
</div>
</div>
如果有人能帮我弄清楚为什么app/views/swipes/destroy.js.erb没有运行,那就太好了。下面是教程。在测试一些ajax事件时,我遇到了类似的问题,因为我的操作中缺少了一些内容: 以下是我在销毁操作中添加的内容:
respond_to do |format|
format.js
end
尝试将您的帐户更改为:
def destroy
@swipe = Swipe.find(params[:id])
if @swipe.destroy
redirect_to myDeck_path
end
respond_to do |format|
format.js
end
end
我希望它对您有用。发生这种情况是因为
destroy.js.erb
$(".my-deck").alert("Foo");
$(".my-deck").html("<%= escape_javascript(render 'my_deck/my_deck') %>");
由于您不在任何地方定义@myDeck
(既不在控制器的销毁
操作中,也不在销毁.js.erb
中),因此此变量初始化为nil
,它没有任何大小
方法,这会导致出现错误
要修复此错误,您需要正确初始化@myDeck
var,或者更改模板,使其不再访问未初始化的var(例如,删除行$(“.my deck”).html(“”;
)
祝你今天愉快 删除控制器WW的销毁方法中的重定向到行,这听起来像是一个很好的叫喊,但没有改变任何东西。感谢ThoughtYeah,我刷新了,然后它就消失了(我可以通过rails控制台验证这一点)-一切似乎都很好,只是我无法让它运行.js.erb文件。您需要删除重定向,因为这将绕过相应视图的渲染。另外,请尝试删除
destroy.js.erb
中的警报
行,不要故意破坏您的问题。尝试一下,但没有运气,它会给出与以前完全相同的行为。谢谢我现在几乎有了一个完整的解决方案。我将myDeck初始化放在destroy方法中,并修复了其他一些小错误,因为需要将部分地址放在一个额外的目录中,否则它会开始查找不存在的/swipes/\u my\u deck.html.erb。我现在唯一的问题是,当_My_deck.html.erb刷新时,它会滞后一项(即,因为我在销毁部分重新初始化它,它使用的是没有及时更新的myDeck)。我有没有办法使用my_deck_controller.js中的myDeck初始化来应用于所有控制器。对不起,这似乎是另一个错误,我不完全理解您在哪里初始化@myDeck以及它需要传递到哪里。不,我不明白我在说什么尽管Alexey,这是一个非常棒的地方
respond_to do |format|
format.js
end
def destroy
@swipe = Swipe.find(params[:id])
if @swipe.destroy
redirect_to myDeck_path
end
respond_to do |format|
format.js
end
end
$(".my-deck").alert("Foo");
$(".my-deck").html("<%= escape_javascript(render 'my_deck/my_deck') %>");
<% if @myDeck.size == 0 %>