1
考えるといくつかのテーブルを結合します検証一意性は
products
prices
prices_regions
regions
は、私は価格が地域および製品に固有であることを確認したいと思います。 validates_uniqueness_of
を使用してこれを書き込むことは可能ですか、それともカスタム検証が必要ですか?例えば
:
laptop = Product.create(name: "Laptop")
tablet = Product.create(name: "Tablet")
brazil = Region.create(name: "Brazil")
canada = Region.create(name: "Canada")
mexico = Region.create(name: "Mexico")
Price.create(product: laptop, regions: [brazil, mexico])
Price.new(product: laptop, regions: [canada]).valid? # true
Price.new(product: laptop, regions: [canada, brazil]).valid? # false
Price.new(product: laptop, regions: [canada, mexico]).valid? # false
Price.new(product: laptop, regions: [brazil, mexico]).valid? # false
Price.new(product: tablet, regions: [brazil, mexico]).valid? # true
シンプルな「スコープ内でのユニークな」検証では、これは[Railsのバリデータに組み込まれています](http://guides.rubyonrails.org/active_record_validations.html#uniqueness)です。有効性:価格、一意性:{範囲:地域} '。しかし、この場合、結合テーブルとより複雑なロジックを扱っているので、私はあなたが上で説明したものが最良であることに同意します。 –