ruby-on-rails - 用于删除外键的 RESTFUL 端点
问题描述
我有一个 Rails API。在 REST API 中删除外键的常见做法(路由和控制器操作)是什么?我的意思是不删除任何资源,只是将外键设置为null
一对一的关系。
例如,我有一辆车,而这辆车有一个客户。
如果我要删除客户,它将是:
DELETE /vehicles/:id/customer
如果我只想vehicle_id: null
在客户身上设置我应该使用什么端点和控制器?
解决方案
我不知道常见的做法是什么,但你可以设置你的routes.rb
东西:
Rails.application.routes.draw do
...
resources :customers do
resources :vehicles, shallow: true
member do
put :remove_vehicle
end
end
...
end
这会给你类似的东西:
customer_vehicles GET /customers/:customer_id/vehicles(.:format) vehicles#index
POST /customers/:customer_id/vehicles(.:format) vehicles#create
new_customer_vehicle GET /customers/:customer_id/vehicles/new(.:format) vehicles#new
edit_vehicle GET /vehicles/:id/edit(.:format) vehicles#edit
vehicle GET /vehicles/:id(.:format) vehicles#show
PATCH /vehicles/:id(.:format) vehicles#update
PUT /vehicles/:id(.:format) vehicles#update
DELETE /vehicles/:id(.:format) vehicles#destroy
remove_vehicle_customer PUT /customers/:id/remove_vehicle(.:format) customers#remove_vehicle
customers GET /customers(.:format) customers#index
POST /customers(.:format) customers#create
new_customer GET /customers/new(.:format) customers#new
edit_customer GET /customers/:id/edit(.:format) customers#edit
customer GET /customers/:id(.:format) customers#show
PATCH /customers/:id(.:format) customers#update
PUT /customers/:id(.:format) customers#update
DELETE /customers/:id(.:format) customers#destroy
在这种情况下,您将向remove_vehicle
您的CustomersController
. 在该操作中,您将params[:id]
可以使用它来查找您的@customer
操作,然后执行以下操作:
class CustomersController < ApplicationController
...
def remove_vehicle
@customer = Customer.find(params[:id])
@customer.update(vehicle_id: nil)
redirect_to :somewhere
end
...
end
推荐阅读
- java - 存在异常时 SonarQube 显示错误
- javascript - div部分没有出现在手机上
- android - 通过 Intent 手动调用广播接收器时应用程序崩溃
- javascript - 使用 Google Maps JS API 随机拖动/平移一点
- ios - Xcode 无法在运行 iOS 13 的真实 iOS 设备上构建
- javascript - 在单击按钮时如何显示它已被选中并在表单提交时获取该按钮的 id
- mysql - 当且仅当在同一天发布时,将行显示在彼此之上
- java - Async AssertionError 没有使测试用例失败
- python-3.x - 我无法收到 0x11 之后的任何 HEX 数据
- php - 会计年度更改时自动重置发票编号