Mud*_*Ali 3 rest ruby-on-rails has-many-through ruby-on-rails-4
我有以下型号
class User < ActiveRecord::Base
has_many :user_wishes
has_many :wishes, through: :user_wishes
end
class UserWish < ActiveRecord::Base
belongs_to :user
belongs_to :wish
end
class Wish < ActiveRecord::Base
has_many :user_wishes
has_many :users, through: :user_wishes
end
Run Code Online (Sandbox Code Playgroud)
现在我有以下界面,用户可以在其中选择/取消选择愿望.

一旦用户完成选择/取消选择,他就提交表单.现在我在后端做的就是user_wishes为给定的user_id&创建或销毁记录wish_id.
现在有两种方法可以实现我能想到的解决方案.
假设用户已经有N个愿望,现在他提出了M愿望的新请求.我将删除(N - M)的差异并添加(M - N)的差异.这种方法似乎非常低效,因为我总是必须通过网络发送(N∩M).
端点: /user_wishes
TYPE : POST ? 但它也删除了记录
参数: {wish_id: [1,2 ..], user_id: 10}
我将在前端有逻辑,它给出了一个新添加/删除的愿望列表.
端点: /user_wishes
TYPE : POST ? 但它也删除了记录
参数: {added_wish_ids: [1,2 ..], removed_wish_ids: [12, 16], user_id: 10}
我现在正在使用这种方法,但这对我来说似乎并不开心!
我想知道最好的方法是什么.应该采用什么端点以及请求类型应该是什么?
添加/删除这些愿望的最宁静的方法可能是拥有一个带有单独POST和DELETE调用的嵌套api结构.
POST /user/:user_id/wish/:wish_id
DELETE /user/:user_id/wish/:wish_id
Run Code Online (Sandbox Code Playgroud)
当用户检查/取消检查列表中的项目时,它将分别发送POST/DELETE.
class UserWishController < ApplicationController
def create
user_id = params[:user_id]
wish_id = params[:wish_id]
UserWish.create(user_id: user_id, wish_id: wish_id)
end
def destroy
user_id = params[:user_id]
wish_id = params[:wish_id]
uw = UserWish.find(user_id: user_id, wish_id: wish_id)
uw.destroy if uw.present?
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
954 次 |
| 最近记录: |