Ruby 关于 rails 5 3 个模型关联
Ruby on rails 5 3 model associations
我有 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
我想我的联想有问题,但似乎无法弄清楚!使用 Postgres。
感谢任何帮助!
class Coupon < ApplicationRecord
belongs_to :user
has_many :products, dependent: :nullify
validates_presence_of :code, :discount_percent, :description
end
我有 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
我想我的联想有问题,但似乎无法弄清楚!使用 Postgres。
感谢任何帮助!
class Coupon < ApplicationRecord
belongs_to :user
has_many :products, dependent: :nullify
validates_presence_of :code, :discount_percent, :description
end