You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决AngularJS删除Rails服务器Massif中VM对象的路由报错

解决Rails中DELETE /vms的路由错误及删除对象的正确方式

咱们先拆解你遇到的两个核心问题:路由配置的误区和HTTP请求的写法问题,一步步来搞定:

1. 修正Rails路由配置

你在routes.rb里写的:delete是不对的——Rails的RESTful路由体系中,删除单个资源对应的动作是destroy,不是delete。而且resources生成的销毁路由是针对单个资源的,路径是/vms/:id,而不是/vms(这个路径对应的是批量删除逻辑,默认resources不会自动生成)。

先把路由改成这样:

Rails.application.routes.draw do
  resources :vms, only: [:index, :create, :destroy], defaults: { format: 'json' }
  # 其他路由...
end

改完后可以在终端跑rails routes命令,确认能看到这条正确的销毁路由:

DELETE /vms/:id(.:format) vms#destroy {:format=>"json"}

如果你想直接用name作为资源标识(而不是默认的id),可以给路由加param选项:

resources :vms, only: [:index, :create, :destroy], defaults: { format: 'json' }, param: :name

这样路由就会变成/vms/:name,刚好匹配你要删除的test这个名称。

2. 修正Angular的$http.delete请求写法

$http.delete的第二个参数不是直接传数据,而是一个配置对象。而且你需要把要删除的VM标识(id或name)放到URL路径里,或者作为查询参数传递。

情况1:用id作为标识(默认逻辑)

假设你的VM对象有id属性,请求应该写成:

// 假设第一个VM的id是1
$http.delete('localhost/vms/1')
  .then(function(response) {
    // 删除成功后的页面更新等处理
  })
  .catch(function(error) {
    // 错误提示等处理
  });

情况2:用name作为标识(对应上面的自定义路由)

如果用name定位资源,直接把name放到URL里:

$http.delete('localhost/vms/test')
  .then(function(response) {
    // 删除成功后的处理
  })
  .catch(function(error) {
    // 错误处理
  });

如果不想改路由,也可以把name作为查询参数传递,但需要在Rails控制器里额外处理:

$http.delete('localhost/vms', { params: { name: 'test' } })

对应的Rails控制器destroy方法要改成:

def destroy
  vm = Vm.find_by(name: params[:name])
  vm.destroy if vm
  # 返回响应逻辑...
end

3. 补充:Rails控制器的destroy方法示例

确保你的VmsController里有正确的销毁逻辑:

class VmsController < ApplicationController
  def index
    @vms = Vm.all
    render json: { success: true, vms: @vms }
  end

  def create
    # 你的创建逻辑...
  end

  def destroy
    # 用id的情况
    # vm = Vm.find(params[:id])
    # 用name的情况
    vm = Vm.find_by(name: params[:name])
    if vm&.destroy
      render json: { success: true }, status: :ok
    else
      render json: { success: false, error: 'VM不存在' }, status: :not_found
    end
  end
end

这样调整后,你的删除请求就能正确匹配路由,成功删除指定的VM对象了。

内容的提问来源于stack exchange,提问作者Egor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:15:40