Rails复选框AJAX调用,不想渲染任何东西

我有一个小的演示设置,其中单击一个复选框通过AJAX切换属性。 它工作正常,但Rails真的想渲染一些东西,所以我基本上是在我的视图中创建一个空白的toggle.js.erb文件。

控制器行动有问题:

def toggle @task = Task.find(params[:id]) respond_to do |format| format.js do if (@task.status != true) @task.status = true else @task.status = false end @task.save render :layout => false end end end 

查看问题:

  

Tasks

    <li id=""> 'Are you sure?', :method => :delete, :remote => true %>
$$('input').each(function(el) { el.observe('click', function(event) { // Get the task ID var elId = el.id.split("_")[1]; // Build the toggle action path var togglePath = '/tasks/' + elId + '/toggle/'; // Create request, disable checkbox, send request, // enable checkbox on completion new Ajax.Request(togglePath, { onCreate: function() { el.disable(); }, onSuccess: function(response) { }, onComplete: function() { el.enable(); } }); }); });

如果没有我在视图中的空白toggle.js.erb文件,Rails仍然会给我一个错误,说它正在尝试渲染一些东西。

最后,我希望两者都不必有一个空白的toggle.js.erb文件,而且我想把Prototype的东西放到我的静态JavaScript中,然后放在视图之外。

我对Rails很陌生,所以可能有一种更简单的方法可以做到这一点,但我有点被困在这里。

render :layout => false表示您想要在没有布局的情况下渲染“切换”视图。

如果你不想渲染任何东西,你应该使用:nothing => true选项

 def toggle @task = Task.find(params[:id]) @task.toggle! :status # if it used only by AJAX call, you don't rly need for 'respond_to' render :nothing => true end 

编辑:在Rails4 / 5中你可以使用head :ok而不是render nothing: true ,这是更好的方法,但结果是一样的。