我有一个属于市场的产品表,并且有很多变型,每个变型都有SKU列,我想验证sku的唯一性,但要针对同一市场。我尝试过
validates :sku, uniqueness: { scope: :market_id }
但是由于变体没有market_id列,所以它不起作用!!,如何克服这个问题?!
答案 0 :(得分:1)
尽管您可以从市场上访问变体, 如果你与你建立关系有很多经历,但是 我认为最好将market_id保存在变体表中并设置基于索引的两列
class Market < ApplicationRecord
has_many :products
has_many :variants , :through => :products
end
class Product < ApplicationRecord
belongs_to :market
has_many :variants
end
class Variant < ApplicationRecord
belongs_to :Product
end
您可以生成迁移以在变量表中添加market_id 基于索引的两列 here is the reference 这是生成基于两个columnn(market_id和sku)的索引的代码
add_index(:variants, [:market_id, :sku], unique: true)
答案 1 :(得分:0)
变体属于某个市场中的产品,因此,为了避免在市场中检索产品的变体时进行额外的联接(这是一项昂贵的操作),并且为了实施此验证,模式的设计应使Variant
既属于Market
也属于Product
。
如果某个变体同时属于Product
和Market
,则验证将如下所示
validates_uniqueness_of :sku, scope: [:market_id, :product_id]