Javascript RoR:destroy.js.erb未与destroy操作一起运行

Javascript 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

我的问题是,我希望在调用我的滑动控制器的销毁操作(它确实起作用)时,它会调用文件app/views/swipes/destroy.js.erb中的javascript。其想法是,在调用此文件时,它将刷新我的my deck div并提供一个更新的网页。不幸的是,虽然我的销毁操作正在工作,但它似乎没有正确调用js,我必须刷新网页以查看该项目已被删除

这里是相关的文件,让我知道如果更多的信息可能是有用的

app/controllers/swipes\u controller.rb

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 %>