因此,我为在线零售商店提供了一个简单的数据库,该数据库与通过Cartproducts获得许多产品的用户之间的关系
用户有很多购物车产品,并且通过购物车产品有很多产品。 购物车产品属于用户和产品。 产品具有许多购物车产品,并且通过购物车产品具有许多用户。
如果阅读起来有点古怪,这是我的模型:
class User < ApplicationRecord
has_many :cartproducts
has_many :products, through: :cartproducts
end
class Cartproduct < ApplicationRecord
belongs_to :user
belongs_to :product
end
class Product < ApplicationRecord
has_many :cartproducts
has_many :users, through: :cartproducts
end
我想要做的是能够从后端向用户发布cartproducts(即向该用户购物车中添加商品),其路线类似于:users / 1 / cartproducts
我如何设置路线以允许从用户cartproduct中发布/更新/删除?如前所述,终结点类似于user /:userID / cartproducts。当前的问题是'users / 1 / cartproducts'返回与'users / 2 / cartproducts'相同的cartproducts数组。当我发布到users / 1 / cartproducts或users / 2 / cartproducts时,两者都进入了user / 1 / carproducts。
编辑:
这是我的路线,我确定这里有问题,
Rails.application.routes.draw do
namespace :api do
namespace :v1 do
resources :products
resources :users, only: [:index, :create, :show] do
resources :cartproducts
get '/user_cartproducts', to: "user#cartproducts"
end
end
end
end
答案 0 :(得分:0)
协会是正确的 第一步,您应该创建这样的路线(我能看到您的路线)
resources :users do
get :cartproducts, on: :member
end
然后将操作添加到user_controller.rb
class UsersController < ApplicationController
before_action :find_user_by_id, only: %I[show cartproducts]
def show; end
def cartproducts
@cartproducts = @user.cartproducts
end
private
def find_user_by_id
@user = User.find_by_id(params[:id])
end
end
答案 1 :(得分:0)
您应该从路线中删除“ get”,例如:
Rails.application.routes.draw do
namespace :api do
namespace :v1 do
resources :products
resources :users, only: [:index, :create, :show] do
resources :cartproducts
end
end
end
end
现在,您应该有一个Cartproducts控制器来处理cart_products。 您应该发布到的网址应为:/ users / 1 / cartproducts 现在,来自Cartproducts控制器的create动作应为:
def create
@user = User.find(params[:user_id])
@cartproduct = @user.cartproducts.new(cartproduct_params)
if @cartproduct.save
# Do something on success
else
# Do something on failure
end
end