Ajax js和rails代码没有同步destroy.js.erb

时间:2014-08-11 15:30:57

标签: javascript ruby-on-rails ruby ruby-on-rails-4

我在destroy.js.erb中有一些代码来执行删除某个对象的ajax请求...

<%@ client.destroy%>无论如何都会运行bit,无论点击什么都会删除客户端。

    callback: function(e) {
        if (e === true) {
           return $('#edit_client_<%= @client.id %>').parent().remove();
           <% @client.destroy %>
           console.log(e);
        }else if (e === false){
           console.log(e);
        }
    }

如何以优雅的方式解决这个问题?

1 个答案:

答案 0 :(得分:2)

问题是您的文件以js.erb结尾。这是资产管道的一部分,这意味着ERB(Rails)位在任何JS之前运行(事实上,JS甚至不会在服务器,所以你不能真正颠倒命名的顺序,让它在服务器上运行。)

最简单的解决方案是添加一个数据属性,其中包含客户端的ID或类似于点击的按钮,并使用该ID而不是Ruby来生成ID。

回复:第一条评论
同样的事情适用。无论Javascript if如何,ERB代码都将运行,因为ERB处理器并不理解/关心您的JS if。最佳解决方案是向服务器发送AJAX请求,在控制器中执行destroy。这也有利于干净地分离你的前端和后端。