代码之家  ›  专栏  ›  技术社区  ›  LDevDesign

Ruby on rails 5 3模型关联

  •  0
  • LDevDesign  · 技术社区  · 7 年前

    我有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
    

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

    我考虑过做这个产品。在优惠券控制器的销毁操作中,优惠券id=零,但我觉得这是一种不好的做法。例如)

    #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
    

    我想我的联想有些问题,但似乎无法解决!使用Postgres。

    非常感谢您的帮助!

    1 回复  |  直到 7 年前
        1
  •  0
  •   Pablo    7 年前
    class Coupon < ApplicationRecord
      belongs_to :user
      has_many :products, dependent: :nullify
      validates_presence_of :code, :discount_percent, :description
    end