轨道上的红宝石 5 3 模型关联



>我有3个模型,用户,产品,优惠券。

一个用户有很多产品,产品属于用户。一个用户有很多优惠券,优惠券属于用户。

我的目标是将优惠券应用于产品。一个产品可以有一张优惠券,一张优惠券可以应用于许多产品。目前,我设置了如下模型:

#coupon.rb
class Coupon < ApplicationRecord
  belongs_to :user
  has_many :products
  validates_presence_of :code, :discount_percent, :description
end
#user.rb
class User < ApplicationRecord
  has_many :products
  has_many :coupons
end
#product.rb
class Product < ApplicationRecord
  belongs_to :user
  has_one :coupon, dependent: :destroy
end

目前用户可以成功创建优惠券,但是如果我将优惠券应用于产品并尝试删除优惠券,则会给我一个外键错误。

我曾考虑过在coupons_controller的破坏操作中使product.coupon_id = nil,但我觉得这是一种不好的做法。 例如(

#coupons_controller.rb
 def destroy
  products = Product.where(coupon_id: @coupon.id)
    products.each do |product|
    product.coupon_id = nil
    product.save
  end
  @coupon.destroy
end

我想我的联想有问题,但似乎无法弄清楚!使用邮政格雷斯。

我感谢任何帮助!

class Coupon < ApplicationRecord
  belongs_to :user
  has_many :products, dependent: :nullify
  validates_presence_of :code, :discount_percent, :description
end

最新更新